[clang-cl] Ignore /Wv and /Wv:17 flags
[llvm-project.git] / clang / test / Sema / anonymous-struct-union.c
blob222aebf53a7d18dd971878a2155f6a70b96a8d7b
1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2 struct X {
3 union {
4 float f3;
5 double d2;
6 } named;
8 union {
9 int i;
10 float f;
12 union {
13 float f2;
14 double d;
18 struct {
19 int a;
20 float b;
24 void test_unqual_references(struct X x, const struct X xc) {
25 // expected-note@-1 3{{variable 'xc' declared const here}}
26 x.i = 0;
27 x.f = 0.0;
28 x.f2 = x.f;
29 x.d = x.f;
30 x.f3 = 0; // expected-error{{no member named 'f3'}}
31 x.a = 0;
33 xc.d = 0.0; // expected-error{{cannot assign to variable 'xc' with const-qualified type 'const struct X'}}
34 xc.f = 0; // expected-error{{cannot assign to variable 'xc' with const-qualified type 'const struct X'}}
35 xc.a = 0; // expected-error{{cannot assign to variable 'xc' with const-qualified type 'const struct X'}}
39 struct Redecl {
40 int x; // expected-note{{previous declaration is here}}
41 struct y { }; // expected-warning{{declaration does not declare anything}}
43 union {
44 int x; // expected-error{{member of anonymous union redeclares 'x'}}
45 float y;
46 double z; // expected-note{{previous declaration is here}}
47 double zz; // expected-note{{previous declaration is here}}
50 int z; // expected-error{{duplicate member 'z'}}
51 void zz(void); // expected-error{{duplicate member 'zz'}}
54 union { // expected-warning{{declaration does not declare anything}}
55 int int_val;
56 float float_val;
59 static union { // expected-warning{{declaration does not declare anything}}
60 int int_val2;
61 float float_val2;
64 void f(void) {
65 int_val2 = 0; // expected-error{{use of undeclared identifier}}
66 float_val2 = 0.0; // expected-error{{use of undeclared identifier}}
69 void g(void) {
70 union { // expected-warning{{declaration does not declare anything}}
71 int i;
72 float f2;
74 i = 0; // expected-error{{use of undeclared identifier}}
75 f2 = 0.0; // expected-error{{use of undeclared identifier}}
78 // <rdar://problem/6483159>
79 struct s0 { union { int f0; }; };
81 // <rdar://problem/6481130>
82 typedef struct { }; // expected-warning{{typedef requires a name}}
84 // PR3675
85 struct s1 {
86 int f0; // expected-note{{previous declaration is here}}
87 union {
88 int f0; // expected-error{{member of anonymous union redeclares 'f0'}}
92 // PR3680
93 struct {}; // expected-warning{{declaration does not declare anything}}
95 struct s2 {
96 union {
97 int a;
98 } // expected-warning{{expected ';' at end of declaration list}}
99 }; // expected-error{{expected member name or ';' after declaration specifiers}}
101 // Make sure we don't a.k.a. anonymous structs.
102 typedef struct {
103 int x;
104 } a_struct;
105 int tmp = (a_struct) { .x = 0 }; // expected-error {{initializing 'int' with an expression of incompatible type 'a_struct'}}
107 // This example comes out of the C11 standard; make sure we don't accidentally reject it.
108 struct s {
109 struct { int i; };
110 int a[];
113 // PR20930
114 struct s3 {
115 struct { int A __attribute__((deprecated)); }; // expected-note {{'A' has been explicitly marked deprecated here}}
118 void deprecated_anonymous_struct_member(void) {
119 struct s3 s;
120 s.A = 1; // expected-warning {{'A' is deprecated}}