1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 // PR3459
3 struct bar {
4 char n[1];
5 };
6
7 struct 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
13 struct s {
14 struct st {
15 int v;
16 } *ts;
17 };
18
19 struct st;
20
foo()21 int foo() {
22 struct st *f;
23 return f->v + f[0].v;
24 }
25
26 // PR3642, PR3671
27 struct pppoe_tag {
28 short tag_type;
29 char tag_data[];
30 };
31 struct 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
38 struct s0 {
39 char a; // expected-note {{previous declaration is here}}
40 char a; // expected-error {{duplicate member 'a'}}
41 };
42
f0(void)43 struct s0 f0(void) {}
44
45 // <rdar://problem/8177927> - This previously triggered an assertion failure.
46 struct x0 {
47 unsigned int x1;
48 };
49
50 // rdar://problem/9150338
51 static struct test1 { // expected-warning {{'static' ignored on this declaration}}
52 int x;
53 };
54 const struct test2 { // expected-warning {{'const' ignored on this declaration}}
55 int x;
56 };
57 inline struct test3 { // expected-warning {{'inline' ignored on this declaration}}
58 int x;
59 };
60