1 // RUN: %clang_cc1 %s -verify -fsyntax-only -ffreestanding 2 3 #include <stddef.h> 4 #include <stdint.h> 5 6 typedef void (* fp)(void); 7 void foo(void); 8 9 // PR clang/3377 10 fp a[(short int)1] = { foo }; 11 12 int myArray[5] = {1, 2, 3, 4, 5}; 13 int *myPointer2 = myArray; 14 int *myPointer = &(myArray[2]); 15 16 17 extern int x; 18 void *g = &x; 19 int *h = &x; 20 21 struct union_crash 22 { 23 union 24 { 25 }; 26 }; 27 28 int test() { 29 int a[10]; 30 int b[10] = a; // expected-error {{array initializer must be an initializer list}} 31 int +; // expected-error {{expected identifier or '('}} 32 33 struct union_crash u = { .d = 1 }; // expected-error {{field designator 'd' does not refer to any field in type 'struct union_crash'}} 34 } 35 36 37 // PR2050 38 struct cdiff_cmd { 39 const char *name; 40 unsigned short argc; 41 int (*handler)(); 42 }; 43 int cdiff_cmd_open(); 44 struct cdiff_cmd commands[] = { 45 {"OPEN", 1, &cdiff_cmd_open } 46 }; 47 48 // PR2348 49 static struct { int z; } s[2]; 50 int *t = &(*s).z; 51 52 // PR2349 53 short *a2(void) 54 { 55 short int b; 56 static short *bp = &b; // expected-error {{initializer element is not a compile-time constant}} 57 58 return bp; 59 } 60 61 int pbool(void) { 62 typedef const _Bool cbool; 63 _Bool pbool1 = (void *) 0; 64 cbool pbool2 = &pbool; 65 return pbool2; 66 } 67 68 69 // rdar://5870981 70 union { float f; unsigned u; } u = { 1.0f }; 71 72 // rdar://6156694 73 int f3(int x) { return x; } 74 typedef void (*vfunc)(void); 75 void *bar = (vfunc) f3; 76 77 // PR2747 78 struct sym_reg { 79 char nc_gpreg; 80 }; 81 int sym_fw1a_scr[] = { 82 ((int)(&((struct sym_reg *)0)->nc_gpreg)) & 0, 83 8 * ((int)(&((struct sym_reg *)0)->nc_gpreg)) 84 }; 85 86 // PR3001 87 struct s1 s2 = { // expected-error {{variable has incomplete type 'struct s1'}} \ 88 // expected-note {{forward declaration of 'struct s1'}} 89 .a = sizeof(struct s3), // expected-error {{invalid application of 'sizeof'}} \ 90 // expected-note{{forward declaration of 'struct s3'}} 91 .b = bogus // expected-error {{use of undeclared identifier 'bogus'}} 92 } 93 94 // PR3382 95 char t[] = ("Hello"); 96 97 // <rdar://problem/6094855> 98 typedef struct { } empty; 99 100 typedef struct { 101 empty e; 102 int i2; 103 } st; 104 105 st st1 = { .i2 = 1 }; 106 107 // <rdar://problem/6096826> 108 struct { 109 int a; 110 int z[2]; 111 } y = { .z = {} }; 112 113 int bbb[10]; 114 115 struct foo2 { 116 uintptr_t a; 117 }; 118 119 struct foo2 bar2[] = { 120 { (intptr_t)bbb } 121 }; 122 123 struct foo2 bar3 = { 1, 2 }; // expected-warning{{excess elements in struct initializer}} 124 125 int* ptest1 = __builtin_choose_expr(1, (int*)0, (int*)0); 126 127 typedef int32_t ivector4 __attribute((vector_size(16))); 128 ivector4 vtest1 = 1 ? (ivector4){1} : (ivector4){1}; 129 ivector4 vtest2 = __builtin_choose_expr(1, (ivector4){1}, (ivector4){1}); 130 131 uintptr_t ptrasintadd1 = (uintptr_t)&a - 4; 132 uintptr_t ptrasintadd2 = (uintptr_t)&a + 4; 133 uintptr_t ptrasintadd3 = 4 + (uintptr_t)&a; 134 135 // PR4285 136 const wchar_t widestr[] = L"asdf"; 137 138 // PR5447 139 const double pr5447 = (0.05 < -1.0) ? -1.0 : 0.0499878; 140 141 // PR4386 142 143 // None of these are constant initializers, but we implement GCC's old 144 // behaviour of accepting bar and zed but not foo. GCC's behaviour was 145 // changed in 2007 (rev 122551), so we should be able to change too one 146 // day. 147 int PR4386_bar(); 148 int PR4386_foo() __attribute((weak)); 149 int PR4386_zed(); 150 151 int PR4386_a = ((void *) PR4386_bar) != 0; 152 int PR4386_b = ((void *) PR4386_foo) != 0; // expected-error{{initializer element is not a compile-time constant}} 153 int PR4386_c = ((void *) PR4386_zed) != 0; 154 int PR4386_zed() __attribute((weak)); 155 156 // <rdar://problem/10185490> (derived from SPEC vortex benchmark) 157 typedef char strty[10]; 158 struct vortexstruct { strty s; }; 159 struct vortexstruct vortexvar = { "asdf" }; 160 161 typedef struct { uintptr_t x : 2; } StructWithBitfield; 162 StructWithBitfield bitfieldvar = { (uintptr_t)&bitfieldvar }; // expected-error {{initializer element is not a compile-time constant}} 163