[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / clang / test / Sema / struct-decl.c
blob32674f3156acdd99326cc22babd2a99aca191dfe
1 // RUN: %clang_cc1 -Wno-pointer-to-int-cast -fsyntax-only -verify %s
2 // PR3459
3 struct bar {
4 char n[1];
5 };
7 struct foo {
8 char name[(int)&((struct bar *)0)->n]; // expected-warning {{folded to constant}}
9 char name2[(int)&((struct bar *)0)->n - 1]; // expected-error {{array size is negative}}
12 // PR3430
13 struct s {
14 struct st {
15 int v;
16 } *ts;
19 struct st;
21 int foo(void) {
22 struct st *f;
23 return f->v + f[0].v;
26 // PR3642, PR3671
27 struct pppoe_tag {
28 short tag_type;
29 char tag_data[];
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;
37 // PR4092
38 struct s0 {
39 char a; // expected-note {{previous declaration is here}}
40 char a; // expected-error {{duplicate member 'a'}}
43 struct s0 f0(void) {}
45 // <rdar://problem/8177927> - This previously triggered an assertion failure.
46 struct x0 {
47 unsigned int x1;
50 // rdar://problem/9150338
51 static struct test1 { // expected-warning {{'static' ignored on this declaration}}
52 int x;
54 const struct test2 { // expected-warning {{'const' ignored on this declaration}}
55 int x;
57 inline struct test3 { // expected-error {{'inline' can only appear on functions}}
58 int x;
61 struct hiding_1 {};
62 struct hiding_2 {};
63 void test_hiding(void) {
64 struct hiding_1 *hiding_1(void);
65 extern struct hiding_2 *hiding_2;
66 struct hiding_1 *p = hiding_1();
67 struct hiding_2 *q = hiding_2;
70 struct PreserveAttributes {};
71 typedef struct __attribute__((noreturn)) PreserveAttributes PreserveAttributes_t; // expected-warning {{'noreturn' attribute only applies to functions and methods}}
73 // PR46255
74 struct FlexibleArrayMem {
75 int a;
76 int b[];
79 struct FollowedByNamed {
80 struct FlexibleArrayMem a; // expected-warning {{field 'a' with variable sized type 'struct FlexibleArrayMem' not at the end of a struct or class is a GNU extension}}
81 int i;
84 struct FollowedByUnNamed {
85 struct FlexibleArrayMem a; // expected-warning {{field 'a' with variable sized type 'struct FlexibleArrayMem' not at the end of a struct or class is a GNU extension}}
86 struct {
87 int i;
91 struct InAnonymous {
92 struct { // expected-warning-re {{field '' with variable sized type 'struct InAnonymous::(anonymous at {{.+}})' not at the end of a struct or class is a GNU extension}}
94 struct FlexibleArrayMem a;
96 int i;
98 struct InAnonymousFollowedByAnon {
99 struct { // expected-warning-re {{field '' with variable sized type 'struct InAnonymousFollowedByAnon::(anonymous at {{.+}})' not at the end of a struct or class is a GNU extension}}
101 struct FlexibleArrayMem a;
103 struct {
104 int i;
108 // This is the behavior in C++ as well, so making sure we reproduce it here.
109 struct InAnonymousFollowedByEmpty {
110 struct FlexibleArrayMem a; // expected-warning {{field 'a' with variable sized type 'struct FlexibleArrayMem' not at the end of a struct or class is a GNU extension}}
111 struct {};