1 // RUN: %clang_cc1 -fsyntax-only -verify -pedantic %s
12 union { // expected-warning{{anonymous types declared in an anonymous union are an extension}}
18 void test_unqual_references();
20 struct { // expected-warning{{anonymous structs are a GNU extension}}
25 void test_unqual_references_const() const;
27 mutable union { // expected-error{{anonymous union at class scope must not have a storage specifier}}
33 void X::test_unqual_references() {
38 f3
= 0; // expected-error{{use of undeclared identifier 'f3'}}
42 void X::test_unqual_references_const() const { // expected-note 2{{member function 'X::test_unqual_references_const' is declared const here}}
44 f2
= 0; // expected-error{{cannot assign to non-static data member within const member function 'test_unqual_references_const'}}
45 a
= 0; // expected-error{{cannot assign to non-static data member within const member function 'test_unqual_references_const'}}
48 void test_unqual_references(X x
, const X xc
) {
49 // expected-note@-1 2{{variable 'xc' declared const here}}
54 x
.f3
= 0; // expected-error{{no member named 'f3'}}
58 xc
.f
= 0; // expected-error{{cannot assign to variable 'xc' with const-qualified type 'const X'}}
59 xc
.a
= 0; // expected-error{{cannot assign to variable 'xc' with const-qualified type 'const X'}}
64 int x
; // expected-note{{previous declaration is here}}
65 class y
{ }; // expected-note{{previous declaration is here}}
68 int x
; // expected-error{{member of anonymous union redeclares 'x'}}
69 float y
; // expected-error{{member of anonymous union redeclares 'y'}}
70 double z
; // expected-note{{previous declaration is here}}
71 double zz
; // expected-note{{previous definition is here}}
74 int z
; // expected-error{{duplicate member 'z'}}
75 void zz(); // expected-error{{redefinition of 'zz' as different kind of symbol}}
78 union { // expected-error{{anonymous unions at namespace or global scope must be declared 'static'}}
84 union { int extern_cxx
; }; // expected-error{{anonymous unions at namespace or global scope must be declared 'static'}}
88 int int_val2
; // expected-note{{previous definition is here}}
93 void int_val2(); // expected-error{{redefinition of 'int_val2' as different kind of symbol}}
112 struct X
{ }; // expected-error {{types cannot be declared in an anonymous union}}
113 struct { int x
; int y
; } y
; // expected-warning{{anonymous types declared in an anonymous union are an extension}}
115 void f(); // expected-error{{functions cannot be declared in an anonymous union}}
116 private: int x1
; // expected-error{{anonymous union cannot contain a private data member}}
117 protected: float x2
; // expected-error{{anonymous union cannot contain a protected data member}}
121 typedef union { }; // expected-warning{{typedef requires a name}}
123 typedef struct objc_module
*Foo
;
134 struct { // expected-warning{{anonymous structs are a GNU extension}}
135 int s0
; // expected-note {{declared private here}}
136 double s1
; // expected-note {{declared private here}}
137 union { // expected-warning{{anonymous types declared in an anonymous struct are an extension}}
138 int su0
; // expected-note {{declared private here}}
139 double su1
; // expected-note {{declared private here}}
143 int u0
; // expected-note {{declared private here}}
144 double u1
; // expected-note {{declared private here}}
145 struct { // expected-warning{{anonymous structs are a GNU extension}} expected-warning{{anonymous types declared in an anonymous union are an extension}}
146 int us0
; // expected-note {{declared private here}}
147 double us1
; // expected-note {{declared private here}}
154 (void) a
.s0
; // expected-error {{private member}}
155 (void) a
.s1
; // expected-error {{private member}}
156 (void) a
.su0
; // expected-error {{private member}}
157 (void) a
.su1
; // expected-error {{private member}}
158 (void) a
.u0
; // expected-error {{private member}}
159 (void) a
.u1
; // expected-error {{private member}}
160 (void) a
.us0
; // expected-error {{private member}}
161 (void) a
.us1
; // expected-error {{private member}}
165 typedef void *voidPtr
;
168 union { int **ctxPtr
; void **voidPtr
; };
195 const union { // expected-warning{{anonymous union cannot be 'const'}}
196 struct { // expected-warning{{anonymous structs are a GNU extension}} expected-warning{{declared in an anonymous union}}
208 struct A
{ union { int x
; float y
; }; }; // expected-note {{member is declared here}}
209 struct B
: private A
{ using A::x
; } b
; // expected-note {{private}}
212 b
.y
= 0; // expected-error {{'y' is a private member of 'PR16630::A'}}
217 // This would previously cause an assertion in C++ mode.
218 static __attribute__((a
)) union { int a
; }; // expected-warning {{unknown attribute 'a' ignored}}