1 // RUN: %clang -target le64-unknown-unknown -### %s -emit-llvm-only -c 2>&1 | FileCheck %s -check-prefix=ECHO 2 // RUN: %clang -target le64-unknown-unknown %s -emit-llvm -S -c -o - | FileCheck %s 3 4 // ECHO: {{.*}} "-cc1" {{.*}}le64-unknown-unknown.c 5 6 typedef __builtin_va_list va_list; 7 typedef __SIZE_TYPE__ size_t; 8 typedef __PTRDIFF_TYPE__ ptrdiff_t; 9 10 extern "C" { 11 12 // CHECK: @align_c = global i32 1 13 int align_c = __alignof(char); 14 15 // CHECK: @align_s = global i32 2 16 int align_s = __alignof(short); 17 18 // CHECK: @align_i = global i32 4 19 int align_i = __alignof(int); 20 21 // CHECK: @align_l = global i32 8 22 int align_l = __alignof(long); 23 24 // CHECK: @align_ll = global i32 8 25 int align_ll = __alignof(long long); 26 27 // CHECK: @align_p = global i32 8 28 int align_p = __alignof(void*); 29 30 // CHECK: @align_f = global i32 4 31 int align_f = __alignof(float); 32 33 // CHECK: @align_d = global i32 8 34 int align_d = __alignof(double); 35 36 // CHECK: @align_ld = global i32 8 37 int align_ld = __alignof(long double); 38 39 // CHECK: @align_vl = global i32 4 40 int align_vl = __alignof(va_list); 41 42 // CHECK: __LITTLE_ENDIAN__defined 43 #ifdef __LITTLE_ENDIAN__ 44 void __LITTLE_ENDIAN__defined() {} 45 #endif 46 47 // CHECK: __le64defined 48 #ifdef __le64 49 void __le64defined() {} 50 #endif 51 52 // CHECK: __le64__defined 53 #ifdef __le64__ 54 void __le64__defined() {} 55 #endif 56 57 // CHECK: unixdefined 58 #ifdef unix 59 void unixdefined() {} 60 #endif 61 62 // CHECK: __unixdefined 63 #ifdef __unix 64 void __unixdefined() {} 65 #endif 66 67 // CHECK: __unix__defined 68 #ifdef __unix__ 69 void __unix__defined() {} 70 #endif 71 72 // CHECK: __ELF__defined 73 #ifdef __ELF__ 74 void __ELF__defined() {} 75 #endif 76 77 // Check types 78 79 // CHECK: signext i8 @check_char() 80 char check_char() { return 0; } 81 82 // CHECK: signext i16 @check_short() 83 short check_short() { return 0; } 84 85 // CHECK: i32 @check_int() 86 int check_int() { return 0; } 87 88 // CHECK: i64 @check_long() 89 long check_long() { return 0; } 90 91 // CHECK: i64 @check_longlong() 92 long long check_longlong() { return 0; } 93 94 // CHECK: zeroext i8 @check_uchar() 95 unsigned char check_uchar() { return 0; } 96 97 // CHECK: zeroext i16 @check_ushort() 98 unsigned short check_ushort() { return 0; } 99 100 // CHECK: i32 @check_uint() 101 unsigned int check_uint() { return 0; } 102 103 // CHECK: i64 @check_ulong() 104 unsigned long check_ulong() { return 0; } 105 106 // CHECK: i64 @check_ulonglong() 107 unsigned long long check_ulonglong() { return 0; } 108 109 // CHECK: i64 @check_size_t() 110 size_t check_size_t() { return 0; } 111 112 // CHECK: i64 @check_ptrdiff_t() 113 ptrdiff_t check_ptrdiff_t() { return 0; } 114 115 // CHECK: float @check_float() 116 float check_float() { return 0; } 117 118 // CHECK: double @check_double() 119 double check_double() { return 0; } 120 121 // CHECK: double @check_longdouble() 122 long double check_longdouble() { return 0; } 123 124 } 125 126 template<int> void Switch(); 127 template<> void Switch<4>(); 128 template<> void Switch<8>(); 129 template<> void Switch<16>(); 130 131 void check_pointer_size() { 132 // CHECK: SwitchILi8 133 Switch<sizeof(void*)>(); 134 135 // CHECK: SwitchILi16 136 Switch<sizeof(va_list)>(); 137 } 138