1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -fblocks -verify %s 2*67e74705SXin Li cat0(int a[static0])3*67e74705SXin Livoid cat0(int a[static 0]) {} // expected-warning {{'static' has no effect on zero-length arrays}} 4*67e74705SXin Li cat(int a[static3])5*67e74705SXin Livoid cat(int a[static 3]) {} // expected-note 2 {{callee declares array parameter as static here}} 6*67e74705SXin Li vat(int i,int a[static i])7*67e74705SXin Livoid vat(int i, int a[static i]) {} // expected-note {{callee declares array parameter as static here}} 8*67e74705SXin Li f(int * p)9*67e74705SXin Livoid f(int *p) { 10*67e74705SXin Li int a[2], b[3], c[4]; 11*67e74705SXin Li 12*67e74705SXin Li cat0(0); 13*67e74705SXin Li 14*67e74705SXin Li cat(0); // expected-warning {{null passed to a callee that requires a non-null argument}} 15*67e74705SXin Li cat(a); // expected-warning {{array argument is too small; contains 2 elements, callee requires at least 3}} 16*67e74705SXin Li cat(b); 17*67e74705SXin Li cat(c); 18*67e74705SXin Li cat(p); 19*67e74705SXin Li 20*67e74705SXin Li vat(1, 0); // expected-warning {{null passed to a callee that requires a non-null argument}} 21*67e74705SXin Li vat(3, b); 22*67e74705SXin Li } 23*67e74705SXin Li 24*67e74705SXin Li 25*67e74705SXin Li typedef int td[static 3]; // expected-error {{'static' used in array declarator outside of function prototype}} 26*67e74705SXin Li typedef void(*fp)(int[static 42]); // no-warning 27*67e74705SXin Li g(void)28*67e74705SXin Livoid g(void) { 29*67e74705SXin Li int a[static 42]; // expected-error {{'static' used in array declarator outside of function prototype}} 30*67e74705SXin Li 31*67e74705SXin Li int b[const 10]; // expected-error {{type qualifier used in array declarator outside of function prototype}} 32*67e74705SXin Li int c[volatile 10]; // expected-error {{type qualifier used in array declarator outside of function prototype}} 33*67e74705SXin Li int d[restrict 10]; // expected-error {{type qualifier used in array declarator outside of function prototype}} 34*67e74705SXin Li 35*67e74705SXin Li int e[static restrict 1]; // expected-error {{'static' used in array declarator outside of function prototype}} 36*67e74705SXin Li } 37*67e74705SXin Li 38*67e74705SXin Li void h(int [static const 10][42]); // no-warning 39*67e74705SXin Li 40*67e74705SXin Li void i(int [10] 41*67e74705SXin Li [static 42]); // expected-error {{'static' used in non-outermost array type derivation}} 42*67e74705SXin Li 43*67e74705SXin Li void j(int [10] 44*67e74705SXin Li [const 42]); // expected-error {{type qualifier used in non-outermost array type derivation}} 45*67e74705SXin Li 46*67e74705SXin Li void k(int (*x)[static 10]); // expected-error {{'static' used in non-outermost array type derivation}} 47*67e74705SXin Li void l(int (x)[static 10]); // no-warning 48*67e74705SXin Li void m(int *x[static 10]); // no-warning 49*67e74705SXin Li void n(int *(x)[static 10]); // no-warning 50*67e74705SXin Li 51*67e74705SXin Li void o(int (x[static 10])(void)); // expected-error{{'x' declared as array of functions of type 'int (void)'}} 52*67e74705SXin Li void p(int (^x)[static 10]); // expected-error{{block pointer to non-function type is invalid}} 53*67e74705SXin Li void q(int (^x[static 10])()); // no-warning 54*67e74705SXin Li r(x)55*67e74705SXin Livoid r(x) 56*67e74705SXin Li int x[restrict]; // no-warning 57*67e74705SXin Li {} 58