1// RUN: %clang_cc1 -fsyntax-only -verify %s 2// PR3459 3struct bar { 4 char n[1]; 5}; 6 7struct foo { 8 char name[(int)&((struct bar *)0)->n]; 9 char name2[(int)&((struct bar *)0)->n - 1]; //expected-error{{'name2' declared as an array with a negative size}} 10}; 11 12// PR3430 13struct s { 14 struct st { 15 int v; 16 } *ts; 17}; 18 19struct st; 20 21int foo() { 22 struct st *f; 23 return f->v + f[0].v; 24} 25 26// PR3642, PR3671 27struct pppoe_tag { 28 short tag_type; 29 char tag_data[]; 30}; 31struct datatag { 32 struct pppoe_tag hdr; //expected-warning{{field 'hdr' with variable sized type 'struct pppoe_tag' not at the end of a struct or class is a GNU extension}} 33 char data; 34}; 35 36 37// PR4092 38struct s0 { 39 char a; // expected-note {{previous declaration is here}} 40 char a; // expected-error {{duplicate member 'a'}} 41}; 42 43struct s0 f0(void) {} 44 45// <rdar://problem/8177927> - This previously triggered an assertion failure. 46struct x0 { 47 unsigned int x1; 48}; 49 50// rdar://problem/9150338 51static struct test1 { // expected-warning {{'static' ignored on this declaration}} 52 int x; 53}; 54const struct test2 { // expected-warning {{'const' ignored on this declaration}} 55 int x; 56}; 57inline struct test3 { // expected-error {{'inline' can only appear on functions}} 58 int x; 59}; 60 61struct hiding_1 {}; 62struct hiding_2 {}; 63void test_hiding() { 64 struct hiding_1 *hiding_1(); 65 extern struct hiding_2 *hiding_2; 66 struct hiding_1 *p = hiding_1(); 67 struct hiding_2 *q = hiding_2; 68} 69 70struct PreserveAttributes {}; 71typedef struct __attribute__((noreturn)) PreserveAttributes PreserveAttributes_t; // expected-warning {{'noreturn' attribute only applies to functions and methods}} 72