1 // RUN: %clang_cc1 %s -verify -fsyntax-only -pedantic
4 typedef int x
[test1()]; // vla
5 static int y
= sizeof(x
); // expected-error {{not a compile-time constant}}
9 void f (unsigned int m
)
17 int x
= sizeof(struct{char qq
[x
];}); // expected-error {{fields must have a constant size}}
20 void f2(unsigned int m
)
22 extern int e1
[2][m
]; // expected-error {{variable length array declaration cannot have 'extern' linkage}}
30 int c
[][i
]; // expected-error {{variably modified type declaration not allowed at file scope}}
31 int d
[i
]; // expected-error {{variable length array declaration not allowed at file scope}}
33 int (*e
)[i
]; // expected-error {{variably modified type declaration not allowed at file scope}}
37 static int a
[i
]; // expected-error {{variable length array declaration cannot have 'static' storage duration}}
38 extern int b
[i
]; // expected-error {{variable length array declaration cannot have 'extern' linkage}}
40 extern int (*c1
)[i
]; // expected-error {{variably modified type declaration cannot have 'extern' linkage}}
45 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}}
47 int a
[*]; // expected-error {{star modifier used outside of function prototype}}
51 int pr2044(int b
) {int (*c(void))[b
];**c() = 2;} // expected-error {{variably modified type}}
53 int (*pr2044c(void))[pr2044b
]; // expected-error {{variably modified type}}
56 void f5(void) { char a
[][f5_ci
] = {""}; } // expected-error {{variable-sized object may not be initialized}}
59 void pr5185(int a
[*]);
60 void pr5185(int a
[*]) // expected-error {{variable length array must be bound in function definition}}
64 void pr23151(int (*p1
)[*]) // expected-error {{variable length array must be bound in function definition}}
67 // Make sure this isn't treated as an error
68 int TransformBug(int a
) {
69 return sizeof(*(int(*)[({ goto v
; v
: a
;})]) 0); // expected-warning {{use of GNU statement expression extension}}
74 int a
[ // expected-error {{variable length array in struct}}
75 implicitly_declared() // expected-error {{call to undeclared function 'implicitly_declared'; ISO C99 and later do not support implicit function declarations}}
78 int (*use_implicitly_declared
)(void) = implicitly_declared
; // ok, was implicitly declared at file scope
80 void VLAPtrAssign(int size
) {
81 int array
[1][2][3][size
][4][5];
82 // This is well formed
83 int (*p
)[2][3][size
][4][5] = array
;
84 // Last array dimension too large
85 int (*p2
)[2][3][size
][4][6] = array
; // expected-warning {{incompatible pointer types}}
86 // Second array dimension too large
87 int (*p3
)[20][3][size
][4][5] = array
; // expected-warning {{incompatible pointer types}}
89 // Not illegal in C, program _might_ be well formed if size == 3.
90 int (*p4
)[2][size
][3][4][5] = array
;
94 goto L
; // expected-error {{cannot jump}}
95 int z
[(int)(1.0 * 2)]; // expected-note {{bypasses initialization of variable length array}}
99 const int pr44406_a
= 32;
101 char c
[pr44406_a
]; // expected-warning {{folded to constant array as an extension}}
104 void test_fold_to_constant_array(void) {
107 goto jump_over_a1
; // expected-error{{cannot jump from this goto statement to its label}}
108 char a1
[ksize
]; // expected-note{{variable length array}}
112 char a2
[ksize
] = "foo"; // expected-warning{{variable length array folded to constant array as an extension}}
116 char a3
[ksize
] = {}; // expected-warning {{variable length array folded to constant array as an extension}} expected-warning{{use of an empty initializer is a C23 extension}}
119 goto jump_over_a4
; // expected-error{{cannot jump from this goto statement to its label}}
120 char a4
[ksize
][2]; // expected-note{{variable length array}}
123 char a5
[ksize
][2] = {}; // expected-warning {{variable length array folded to constant array as an extension}} expected-warning{{use of an empty initializer is a C23 extension}}
125 int a6
[ksize
] = {1,2,3,4}; // expected-warning{{variable length array folded to constant array as an extension}}
127 // expected-warning@+1{{variable length array folded to constant array as an extension}}
128 int a7
[ksize
] __attribute__((annotate("foo"))) = {1,2,3,4};
130 // expected-warning@+1{{variable length array folded to constant array as an extension}}
131 char a8
[2][ksize
] = {{1,2,3,4},{4,3,2,1}};
133 // expected-warning@+1{{variable length array folded to constant array as an extension}}
134 char (*a9
)[] = (char[2][ksize
]) {{1,2,3,4},{4,3,2,1}};
136 char (*a10
)[ksize
] = 0;