Clang Project

clang_source_code/test/CodeGen/aarch64-type-sizes.c
1// RUN: %clang_cc1 -triple aarch64_be-none-linux-gnu -emit-llvm -w -o - %s | FileCheck %s
2// char by definition has size 1
3
4// CHECK: target datalayout = "E-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
5
6int check_short() {
7  return sizeof(short);
8// CHECK: ret i32 2
9}
10
11int check_int() {
12  return sizeof(int);
13// CHECK: ret i32 4
14}
15
16int check_long() {
17// Both 4 and 8 are permitted under the PCS, Linux says 8!
18  return sizeof(long);
19// CHECK: ret i32 8
20}
21
22int check_longlong() {
23  return sizeof(long long);
24// CHECK: ret i32 8
25}
26
27int check_int128() {
28  return sizeof(__int128);
29// CHECK: ret i32 16
30}
31
32int check_fp16() {
33  return sizeof(__fp16);
34// CHECK: ret i32 2
35}
36
37int check_float() {
38  return sizeof(float);
39// CHECK: ret i32 4
40}
41
42int check_double() {
43  return sizeof(double);
44// CHECK: ret i32 8
45}
46
47int check_longdouble() {
48  return sizeof(long double);
49// CHECK: ret i32 16
50}
51
52int check_floatComplex() {
53  return sizeof(float _Complex);
54// CHECK: ret i32 8
55}
56
57int check_doubleComplex() {
58  return sizeof(double _Complex);
59// CHECK: ret i32 16
60}
61
62int check_longdoubleComplex() {
63  return sizeof(long double _Complex);
64// CHECK: ret i32 32
65}
66
67int check_bool() {
68  return sizeof(_Bool);
69// CHECK: ret i32 1
70}
71
72int check_wchar() {
73// PCS allows either unsigned short or unsigned int. Linux again says "bigger!"
74  return sizeof(__WCHAR_TYPE__);
75// CHECK: ret i32 4
76}
77
78int check_wchar_unsigned() {
79  return (__WCHAR_TYPE__)-1 > (__WCHAR_TYPE__)0;
80// CHECK: ret i32 1
81}
82
83enum Small {
84  Item
85};
86
87int foo() {
88  return sizeof(enum Small);
89// CHECK: ret i32 4
90}
91