1 // RUN: %clang_cc1 %s -ffreestanding -Wno-int-to-pointer-cast -fsyntax-only -verify -pedantic -fpascal-strings -std=c99 2 3 #include <stdint.h> 4 #include <limits.h> 5 6 int a() {int p; *(1 ? &p : (void*)(0 && (a(),1))) = 10;} // expected-error {{incomplete type 'void' is not assignable}} 7 8 // rdar://6091492 - ?: with __builtin_constant_p as the operand is an i-c-e. 9 int expr; 10 char w[__builtin_constant_p(expr) ? expr : 1]; 11 12 char v[sizeof(__builtin_constant_p(0)) == sizeof(int) ? 1 : -1]; 13 14 int implicitConversion = 1.0; 15 char floatArith[(int)(1.0+2.0)]; // expected-warning {{must be an integer constant expression}} 16 17 // __builtin_constant_p as the condition of ?: allows arbitrary foldable 18 // constants to be transmogrified into i-c-e's. 19 char b[__builtin_constant_p((int)(1.0+2.0)) ? (int)(1.0+2.0) : -1]; 20 21 struct c { 22 int a : ( 23 __builtin_constant_p((int)(1.0+2.0)) ? (int)(1.0+ 24 expr // expected-error {{expression is not an integer constant expression}} 25 ) : -1); 26 }; 27 28 29 30 31 void test1(int n, int* p) { *(n ? p : (void *)(7-7)) = 1; } 32 void test2(int n, int* p) { *(n ? p : (void *)0) = 1; } 33 34 35 36 char array[1024/(sizeof (long))]; 37 38 int x['\xBb' == (char) 187 ? 1: -1]; 39 40 // PR1992 41 void func(int x) 42 { 43 switch (x) { 44 case sizeof("abc"): break; 45 case sizeof("loooong"): func(4); 46 case sizeof("\ploooong"): func(4); 47 } 48 } 49 50 51 // rdar://4213768 52 int expr; 53 char y[__builtin_constant_p(expr) ? -1 : 1]; 54 char z[__builtin_constant_p(4) ? 1 : -1]; 55 56 // Comma tests 57 int comma1[0?1,2:3]; 58 int comma2[1||(1,2)]; // expected-warning {{use of logical '||' with constant operand}} \ 59 // expected-note {{use '|' for a bitwise operation}} 60 int comma3[(1,2)]; // expected-warning {{size of static array must be an integer constant expression}} 61 62 // Pointer + __builtin_constant_p 63 char pbcp[__builtin_constant_p(4) ? (intptr_t)&expr : 0]; // expected-error {{variable length array declaration not allowed at file scope}} 64 65 int illegaldiv1a[1 || 1/0]; 66 int illegaldiv1b[1 && 1/0]; //expected-error{{variable length array declaration not allowed at file scope}} 67 68 int illegaldiv2[1/0]; // expected-error {{variable length array declaration not allowed at file scope}} 69 int illegaldiv3[INT_MIN / -1]; // expected-error {{variable length array declaration not allowed at file scope}} 70 // PR9262 71 int illegaldiv4[0 / (1 / 0)]; // expected-error {{variable length array declaration not allowed at file scope}} 72 73 int chooseexpr[__builtin_choose_expr(1, 1, expr)]; 74 int realop[(__real__ 4) == 4 ? 1 : -1]; 75 int imagop[(__imag__ 4) == 0 ? 1 : -1]; 76 77 int *PR14729 = 0 ?: 1/0; // expected-error {{not a compile-time constant}} expected-warning 3{{}} 78