1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify -pedantic %s 25265af5b555f703be365dbc32c4e518fe38d4d9aChris Lattner 33cb069213c8502dbb7a67860d40122d869ed8fd6Sebastian Redlstruct s; // expected-note 2 {{forward declaration of 'struct s'}} 45265af5b555f703be365dbc32c4e518fe38d4d9aChris Lattnerstruct s* t (struct s z[]) { // expected-error {{array has incomplete element type}} 5ce7f4cc77f00a4e591596790cf9588e4daf71534Chris Lattner return z; 65265af5b555f703be365dbc32c4e518fe38d4d9aChris Lattner} 75265af5b555f703be365dbc32c4e518fe38d4d9aChris Lattner 853a3234f4bc3fd5c7e2403321bff9c907e1f2de6Steve Naroffvoid ff() { 953a3234f4bc3fd5c7e2403321bff9c907e1f2de6Steve Naroff struct s v, *p; // expected-error {{variable has incomplete type 'struct s'}} 1053a3234f4bc3fd5c7e2403321bff9c907e1f2de6Steve Naroff 1153a3234f4bc3fd5c7e2403321bff9c907e1f2de6Steve Naroff p = &v; 1253a3234f4bc3fd5c7e2403321bff9c907e1f2de6Steve Naroff} 1353a3234f4bc3fd5c7e2403321bff9c907e1f2de6Steve Naroff 145265af5b555f703be365dbc32c4e518fe38d4d9aChris Lattnervoid *k (void l[2]) { // expected-error {{array has incomplete element type}} 155265af5b555f703be365dbc32c4e518fe38d4d9aChris Lattner return l; 165265af5b555f703be365dbc32c4e518fe38d4d9aChris Lattner} 175265af5b555f703be365dbc32c4e518fe38d4d9aChris Lattner 1826b8ff45bab784183018f79ec95327aac4e7e8b0Steve Naroffstruct vari { 1926b8ff45bab784183018f79ec95327aac4e7e8b0Steve Naroff int a; 2026b8ff45bab784183018f79ec95327aac4e7e8b0Steve Naroff int b[]; 2126b8ff45bab784183018f79ec95327aac4e7e8b0Steve Naroff}; 2226b8ff45bab784183018f79ec95327aac4e7e8b0Steve Naroff 230bfe54fdc83b7b4e37c40e652d86d15aa89885b2Douglas Gregorstruct vari *func(struct vari a[]) { // expected-warning {{'struct vari' may not be used as an array element due to flexible array member}} 2426b8ff45bab784183018f79ec95327aac4e7e8b0Steve Naroff return a; 2526b8ff45bab784183018f79ec95327aac4e7e8b0Steve Naroff} 2626b8ff45bab784183018f79ec95327aac4e7e8b0Steve Naroff 279a75f8ae17e7f917f491c2e8757bafbf57254c24Steve Naroffint foo[](void); // expected-error {{'foo' declared as array of functions}} 28d3cd1e56d19474ac785e54c3915d82d2ad7f7fa9Steve Naroffint foo2[1](void); // expected-error {{'foo2' declared as array of functions}} 2926b8ff45bab784183018f79ec95327aac4e7e8b0Steve Naroff 3026b8ff45bab784183018f79ec95327aac4e7e8b0Steve Narofftypedef int (*pfunc)(void); 3126b8ff45bab784183018f79ec95327aac4e7e8b0Steve Naroff 3226b8ff45bab784183018f79ec95327aac4e7e8b0Steve Naroffpfunc xx(int f[](void)) { // expected-error {{'f' declared as array of functions}} 3326b8ff45bab784183018f79ec95327aac4e7e8b0Steve Naroff return f; 3426b8ff45bab784183018f79ec95327aac4e7e8b0Steve Naroff} 3542471f8bc6c1179a54941fac3c483ec1bd319436Steve Naroff 3642471f8bc6c1179a54941fac3c483ec1bd319436Steve Naroffvoid check_size() { 3742471f8bc6c1179a54941fac3c483ec1bd319436Steve Naroff float f; 3842471f8bc6c1179a54941fac3c483ec1bd319436Steve Naroff int size_not_int[f]; // expected-error {{size of array has non-integer type 'float'}} 39b2b5cc0cf908d516a107d373db963f692449a8a8Chandler Carruth int negative_size[1-2]; // expected-error{{array with a negative size}} 4042471f8bc6c1179a54941fac3c483ec1bd319436Steve Naroff int zero_size[0]; // expected-warning{{zero size arrays are an extension}} 4142471f8bc6c1179a54941fac3c483ec1bd319436Steve Naroff} 4242471f8bc6c1179a54941fac3c483ec1bd319436Steve Naroff 43d7444aac1af1c2c1d5e5b7467ecf6006ee2d8abeSteve Naroffstatic int I; 44211316faa26af4ce594a10bcfc204124fe363362Chris Lattnertypedef int TA[I]; // expected-error {{variable length array declaration not allowed at file scope}} 45d7444aac1af1c2c1d5e5b7467ecf6006ee2d8abeSteve Naroff 46a41a8c5972c2632247ae7913cf6ce65d45f7e702Douglas Gregorvoid strFunc(char *); // expected-note{{passing argument to parameter here}} 47d7444aac1af1c2c1d5e5b7467ecf6006ee2d8abeSteve Naroffconst char staticAry[] = "test"; 48d1969d803cfcc65f1c334df4cc89c7fdd33ee4c9Mike Stumpvoid checkStaticAry() { 4958f9e13e87e57236fee4b914eea9be6f92a1c345Chris Lattner strFunc(staticAry); // expected-warning{{passing 'const char [5]' to parameter of type 'char *' discards qualifiers}} 50d7444aac1af1c2c1d5e5b7467ecf6006ee2d8abeSteve Naroff} 51d7444aac1af1c2c1d5e5b7467ecf6006ee2d8abeSteve Naroff 52d7444aac1af1c2c1d5e5b7467ecf6006ee2d8abeSteve Naroff 53