1*67e74705SXin Li // RUN: %clang_cc1 %s -verify -fsyntax-only -pedantic 2*67e74705SXin Li test1()3*67e74705SXin Liint test1() { 4*67e74705SXin Li typedef int x[test1()]; // vla 5*67e74705SXin Li static int y = sizeof(x); // expected-error {{not a compile-time constant}} 6*67e74705SXin Li } 7*67e74705SXin Li 8*67e74705SXin Li // PR2347 f(unsigned int m)9*67e74705SXin Livoid f (unsigned int m) 10*67e74705SXin Li { 11*67e74705SXin Li int e[2][m]; 12*67e74705SXin Li 13*67e74705SXin Li e[0][0] = 0; 14*67e74705SXin Li } 15*67e74705SXin Li 16*67e74705SXin Li // PR3048 17*67e74705SXin Li int x = sizeof(struct{char qq[x];}); // expected-error {{fields must have a constant size}} 18*67e74705SXin Li 19*67e74705SXin Li // PR2352 f2(unsigned int m)20*67e74705SXin Livoid f2(unsigned int m) 21*67e74705SXin Li { 22*67e74705SXin Li extern int e1[2][m]; // expected-error {{variable length array declaration cannot have 'extern' linkage}} 23*67e74705SXin Li 24*67e74705SXin Li e1[0][0] = 0; 25*67e74705SXin Li 26*67e74705SXin Li } 27*67e74705SXin Li 28*67e74705SXin Li // PR2361 29*67e74705SXin Li int i; 30*67e74705SXin Li int c[][i]; // expected-error {{variably modified type declaration not allowed at file scope}} 31*67e74705SXin Li int d[i]; // expected-error {{variable length array declaration not allowed at file scope}} 32*67e74705SXin Li 33*67e74705SXin Li int (*e)[i]; // expected-error {{variably modified type declaration not allowed at file scope}} 34*67e74705SXin Li f3()35*67e74705SXin Livoid f3() 36*67e74705SXin Li { 37*67e74705SXin Li static int a[i]; // expected-error {{variable length array declaration cannot have 'static' storage duration}} 38*67e74705SXin Li extern int b[i]; // expected-error {{variable length array declaration cannot have 'extern' linkage}} 39*67e74705SXin Li 40*67e74705SXin Li extern int (*c1)[i]; // expected-error {{variably modified type declaration cannot have 'extern' linkage}} 41*67e74705SXin Li static int (*d)[i]; 42*67e74705SXin Li } 43*67e74705SXin Li 44*67e74705SXin Li // PR3663 45*67e74705SXin Li static const unsigned array[((2 * (int)((((4) / 2) + 1.0/3.0) * (4) - 1e-8)) + 1)]; // expected-warning {{variable length array folded to constant array as an extension}} 46*67e74705SXin Li 47*67e74705SXin Li int a[*]; // expected-error {{star modifier used outside of function prototype}} 48*67e74705SXin Li int f4(int a[*][*]); 49*67e74705SXin Li 50*67e74705SXin Li // PR2044 pr2044(int b)51*67e74705SXin Liint pr2044(int b) {int (*c(void))[b];**c() = 2;} // expected-error {{variably modified type}} 52*67e74705SXin Li int pr2044b; 53*67e74705SXin Li int (*pr2044c(void))[pr2044b]; // expected-error {{variably modified type}} 54*67e74705SXin Li 55*67e74705SXin Li const int f5_ci = 1; f5()56*67e74705SXin Livoid f5() { char a[][f5_ci] = {""}; } // expected-warning {{variable length array folded to constant array as an extension}} 57*67e74705SXin Li 58*67e74705SXin Li // PR5185 59*67e74705SXin Li void pr5185(int a[*]); pr5185(int a[* ])60*67e74705SXin Livoid pr5185(int a[*]) // expected-error {{variable length array must be bound in function definition}} 61*67e74705SXin Li { 62*67e74705SXin Li } 63*67e74705SXin Li pr23151(int (* p1)[* ])64*67e74705SXin Livoid pr23151(int (*p1)[*]) // expected-error {{variable length array must be bound in function definition}} 65*67e74705SXin Li {} 66*67e74705SXin Li 67*67e74705SXin Li // Make sure this isn't treated as an error TransformBug(int a)68*67e74705SXin Liint TransformBug(int a) { 69*67e74705SXin Li return sizeof(*(int(*)[({ goto v; v: a;})]) 0); // expected-warning {{use of GNU statement expression extension}} 70*67e74705SXin Li } 71