i-c-e.c revision 7ef655a78863c0a7550bfe51174b9c340ab1dce0
1// RUN: %clang %s -fsyntax-only -Xclang -verify -pedantic -fpascal-strings 2 3#include <stdint.h> 4#include <limits.h> 5 6int 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. 9int expr; 10char w[__builtin_constant_p(expr) ? expr : 1]; 11 12 13// __builtin_constant_p as the condition of ?: allows arbitrary foldable 14// constants to be transmogrified into i-c-e's. 15char b[__builtin_constant_p((int)(1.0+2.0)) ? (int)(1.0+2.0) : -1]; 16 17struct c { 18 int a : ( // expected-error {{expression is not an integer constant expression}} 19 __builtin_constant_p((int)(1.0+2.0)) ? (int)(1.0+ 20 expr // expected-note {{subexpression not valid in an integer constant expression}} 21 ) : -1); 22}; 23 24 25 26 27void test1(int n, int* p) { *(n ? p : (void *)(7-7)) = 1; } 28void test2(int n, int* p) { *(n ? p : (void *)0) = 1; } 29 30 31 32char array[1024/(sizeof (long))]; 33 34int x['\xBb' == (char) 187 ? 1: -1]; 35 36// PR1992 37void func(int x) 38{ 39 switch (x) { 40 case sizeof("abc"): break; 41 case sizeof("loooong"): func(4); 42 case sizeof("\ploooong"): func(4); 43 } 44} 45 46 47// rdar://4213768 48int expr; 49char y[__builtin_constant_p(expr) ? -1 : 1]; 50char z[__builtin_constant_p(4) ? 1 : -1]; 51 52// Comma tests 53int comma1[0?1,2:3]; 54int comma2[1||(1,2)]; 55int comma3[(1,2)]; // expected-warning {{size of static array must be an integer constant expression}} 56 57// Pointer + __builtin_constant_p 58char pbcp[__builtin_constant_p(4) ? (intptr_t)&expr : 0]; // expected-error {{variable length array declaration not allowed at file scope}} 59 60int illegaldiv1[1 || 1/0]; // expected-warning {{division by zero is undefined}} 61int illegaldiv2[1/0]; // expected-error {{variable length array declaration not allowed at file scope}} \ 62 // expected-warning {{division by zero is undefined}} 63int illegaldiv3[INT_MIN / -1]; // expected-error {{variable length array declaration not allowed at file scope}} 64 65int chooseexpr[__builtin_choose_expr(1, 1, expr)]; 66int realop[(__real__ 4) == 4 ? 1 : -1]; 67int imagop[(__imag__ 4) == 0 ? 1 : -1]; 68