blob: 72790c9abb400f9783e3df154ece0ec03cd6d866 [file] [log] [blame]
Douglas Gregor4920f1f2009-01-12 22:49:06 +00001// RUN: clang -fsyntax-only -verify %s
2struct X {
3 union {
4 float f3;
5 double d2;
6 } named;
7
8 union {
9 int i;
10 float f;
11
12 union {
13 float f2;
14 double d;
15 };
16 };
17
18 struct {
19 int a;
20 float b;
21 };
22};
23
24void test_unqual_references(struct X x, const struct X xc) {
25 x.i = 0;
26 x.f = 0.0;
27 x.f2 = x.f;
28 x.d = x.f;
29 x.f3 = 0; // expected-error{{no member named 'f3'}}
30 x.a = 0;
31
32 xc.d = 0.0; // expected-error{{read-only variable is not assignable}}
33 xc.f = 0; // expected-error{{read-only variable is not assignable}}
34 xc.a = 0; // expected-error{{read-only variable is not assignable}}
35}
36
37
38struct Redecl {
39 int x; // expected-note{{previous declaration is here}}
40 struct y { };
41
42 union {
43 int x; // expected-error{{member of anonymous union redeclares 'x'}}
44 float y;
45 double z; // expected-note{{previous declaration is here}}
46 double zz; // expected-note{{previous declaration is here}}
47 };
48
49 int z; // expected-error{{duplicate member 'z'}}
50 void zz(); // expected-error{{duplicate member 'zz'}} \
51 // expected-error{{field 'zz' declared as a function}}
52};
53
54union { // expected-error{{anonymous unions must be struct or union members}}
55 int int_val;
56 float float_val;
57};
58
59static union { // expected-error{{anonymous unions must be struct or union members}}
60 int int_val2;
61 float float_val2;
62};
63
64void f() {
65 int_val2 = 0; // expected-error{{use of undeclared identifier}}
66 float_val2 = 0.0; // expected-error{{use of undeclared identifier}}
67}
68
69void g() {
70 union { // expected-error{{anonymous unions must be struct or union members}}
71 int i;
72 float f2;
73 };
74 i = 0; // expected-error{{use of undeclared identifier}}
75 f2 = 0.0; // expected-error{{use of undeclared identifier}}
76}
77
78// <rdar://problem/6483159>
79struct s0 { union { int f0; }; };
80
81// <rdar://problem/6481130>
82typedef struct { }; // expected-error{{declaration does not declare anything}}