xref: /aosp_15_r20/external/clang/test/Sema/array-constraint.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -pedantic %s
2*67e74705SXin Li 
3*67e74705SXin Li struct s;  // expected-note 2 {{forward declaration of 'struct s'}}
t(struct s z[])4*67e74705SXin Li struct s* t (struct s z[]) {   // expected-error {{array has incomplete element type}}
5*67e74705SXin Li   return z;
6*67e74705SXin Li }
7*67e74705SXin Li 
ff()8*67e74705SXin Li void ff() {
9*67e74705SXin Li   struct s v, *p; // expected-error {{variable has incomplete type 'struct s'}}
10*67e74705SXin Li 
11*67e74705SXin Li   p = &v;
12*67e74705SXin Li }
13*67e74705SXin Li 
k(void l[2])14*67e74705SXin Li void *k (void l[2]) {          // expected-error {{array has incomplete element type}}
15*67e74705SXin Li   return l;
16*67e74705SXin Li }
17*67e74705SXin Li 
18*67e74705SXin Li struct vari {
19*67e74705SXin Li   int a;
20*67e74705SXin Li   int b[];
21*67e74705SXin Li };
22*67e74705SXin Li 
func(struct vari a[])23*67e74705SXin Li struct vari *func(struct vari a[]) { // expected-warning {{'struct vari' may not be used as an array element due to flexible array member}}
24*67e74705SXin Li   return a;
25*67e74705SXin Li }
26*67e74705SXin Li 
27*67e74705SXin Li int foo[](void);  // expected-error {{'foo' declared as array of functions}}
28*67e74705SXin Li int foo2[1](void);  // expected-error {{'foo2' declared as array of functions}}
29*67e74705SXin Li 
30*67e74705SXin Li typedef int (*pfunc)(void);
31*67e74705SXin Li 
xx(int f[](void))32*67e74705SXin Li pfunc xx(int f[](void)) { // expected-error {{'f' declared as array of functions}}
33*67e74705SXin Li   return f;
34*67e74705SXin Li }
35*67e74705SXin Li 
check_size()36*67e74705SXin Li void check_size() {
37*67e74705SXin Li   float f;
38*67e74705SXin Li   int size_not_int[f]; // expected-error {{size of array has non-integer type 'float'}}
39*67e74705SXin Li   int negative_size[1-2]; // expected-error{{array with a negative size}}
40*67e74705SXin Li   int zero_size[0]; // expected-warning{{zero size arrays are an extension}}
41*67e74705SXin Li }
42*67e74705SXin Li 
43*67e74705SXin Li static int I;
44*67e74705SXin Li typedef int TA[I]; // expected-error {{variable length array declaration not allowed at file scope}}
45*67e74705SXin Li 
46*67e74705SXin Li void strFunc(char *); // expected-note{{passing argument to parameter here}}
47*67e74705SXin Li const char staticAry[] = "test";
checkStaticAry()48*67e74705SXin Li void checkStaticAry() {
49*67e74705SXin Li   strFunc(staticAry); // expected-warning{{passing 'const char [5]' to parameter of type 'char *' discards qualifiers}}
50*67e74705SXin Li }
51*67e74705SXin Li 
52*67e74705SXin Li 
53