annotate gcc/testsuite/g++.dg/warn/Wmismatched-tags.C @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 /* PR c++/61339 - add mismatch between struct and class
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 Test to verify that -Wmismatched-tags is issued for declarations
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 of the same class using different class-ids.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4 { dg-do compile }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 { dg-options "-Wmismatched-tags" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7 namespace Classes
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 class A;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 class A;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12 struct B;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 struct B;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15 union C;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 union C;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 struct D; // { dg-warning "Classes::D' declared with a mismatched class-key 'struct'" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 class D { }; // { dg-message "Classes::D' defined as 'class' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 class E; // { dg-warning "Classes::E' declared with a mismatched class-key 'class'" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22 struct E { }; // { dg-message "Classes::E' defined as 'struct' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24 class D;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 struct E;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 class D;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 struct E;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 struct D; // { dg-warning "Classes::D' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32 class E; // { dg-warning "Classes::E' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34 class F; // { dg-message "Classes::F' first declared as 'class' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 class F;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 struct G { }; // { dg-message "Classes::G' defined as 'struct' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 } // namespace Classes
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 namespace Classes
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 class A;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 struct B;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45 union C;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 class D;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 struct E;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 struct F; // { dg-warning "Classes::F' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 struct G;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 // Verify that the correct hint is provided, one to remove the class-key
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 // when it's redundant, and one to (only) replace it with the correct one
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 // when it's needed to disambiguate the reference to the class type.
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 namespace RemoveOrReplace
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 struct Func;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 class Func; // { dg-warning "RemoveOrReplace::Func' declared with a mismatched class-key 'class'" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61 // { dg-message "replace the class-key with 'struct'" "hint to remove" { target *-*-* } .-1 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63 void Func ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65 class Func; // { dg-warning "RemoveOrReplace::Func' declared with a mismatched class-key 'class'" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
66 // { dg-message "replace the class-key with 'struct'" "hint to replace" { target *-*-* } .-1 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
67
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
68 class Var;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
69 struct Var; // { dg-warning "RemoveOrReplace::Var' declared with a mismatched class-key 'struct'" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
70 // { dg-message "replace the class-key with 'class'" "hint to remove" { target *-*-* } .-1 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
71 void f (struct Var*); // { dg-warning "RemoveOrReplace::Var' declared with a mismatched class-key 'struct'" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
72 // { dg-message "remove the class-key or replace it with 'class'" "hint to remove" { target *-*-* } .-1 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
73
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
74 int Var;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
75
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
76 struct Var; // { dg-warning "RemoveOrReplace::Var' declared with a mismatched class-key 'struct'" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
77 // { dg-message "replace the class-key with 'class'" "hint to replace" { target *-*-* } .-1 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
78 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
79
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
80 namespace GlobalObjects
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
81 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
82 class A; // { dg-message "'GlobalObjects::A' first declared as 'class' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
83 struct B; // { dg-message "'GlobalObjects::B' first declared as 'struct' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
84 class C { }; // { dg-message "'GlobalObjects::C' defined as 'class' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
85
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
86 extern A a0;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
87 extern class A a1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
88 extern class A a2;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
89
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
90 extern B b0;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
91 extern struct B b1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
92 extern struct B b2;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
93
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
94 extern struct A a3; // { dg-warning "GlobalObjects::A' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
95 extern class A a4;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
96
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
97 extern class B b3; // { dg-warning "GlobalObjects::B' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
98 extern struct B b4;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
99
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
100 extern struct C c[]; // { dg-warning "GlobalObjects::C' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
101 // { dg-message "remove the class-key or replace it with 'class'" "hint to remove" { target *-*-* } .-1 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
102
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
103 extern char
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
104 arr[sizeof (struct C)]; // { dg-warning "GlobalObjects::C' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
105 // { dg-message "remove the class-key or replace it with 'class'" "hint to remove" { target *-*-* } .-1 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
106 } // namespace GlobalObjects
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
107
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
108
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
109 namespace LocalObjects
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
110 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
111 class A; // { dg-message "LocalObjects::A' first declared as 'class' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
112 struct B; // { dg-message "LocalObjects::B' first declared as 'struct' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
113
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
114 void f (A*, B&)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
115 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
116 class A *a1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
117 class A *a2;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
118
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
119 struct B *b1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
120 struct B *b2;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
121
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
122 struct A *a3; // { dg-warning "LocalObjects::A' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
123 class A *a4;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
124
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
125 class B *b3; // { dg-warning "LocalObjects::B' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
126 struct B *b4;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
127 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
128
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
129 void g (struct A*); // { dg-warning "LocalObjects::A' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
130
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
131 } // namespace LocalObjects
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
132
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
133
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
134 namespace MemberClasses
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
135 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
136 struct A { struct B; };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
137 struct C { struct D; struct D; struct D { }; };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
138 struct E { class F; class F { }; class F; };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
139
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
140 struct G {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
141 struct H; // { dg-message "MemberClasses::G::H' first declared as 'struct' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
142 class H; // { dg-warning "MemberClasses::G::H' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
143 class I { }; // { dg-message "MemberClasses::G::I' defined as 'class' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
144 struct I; // { dg-warning "MemberClasses::G::I' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
145 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
146 } // namespace MemberClasses
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
147
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
148
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
149 namespace DataMembers
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
150 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
151 struct A { struct B *p; };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
152 struct C { struct D *p; struct D *q; struct D { } d; };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
153 struct E { class F &r; class F { } f; class F *p; };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
154
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
155 class G; // { dg-message "DataMembers::G' first declared as 'class' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
156 struct H; // { dg-message "DataMembers::H' first declared as 'struct' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
157
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
158 struct I {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
159 struct G *p0; // { dg-warning "DataMembers::G' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
160 class G *p1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
161
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
162 struct H &r0;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
163 class H &r1; // { dg-warning "DataMembers::H' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
164
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
165 class J { }; // { dg-message "DataMembers::I::J' defined as 'class' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
166 struct K { }; // { dg-message "DataMembers::I::K' defined as 'struct' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
167
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
168 class J j0;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
169 class K k0; // { dg-warning "DataMembers::I::K' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
170
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
171 struct J j1; // { dg-warning "DataMembers::I::J' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
172 struct K k1;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
173 };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
174 } // namespace DataMembers
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
175
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
176
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
177 namespace Templates
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
178 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
179 template <int> class A;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
180 template <int> class A;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
181
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
182 template <int> struct B;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
183 template <int> struct B;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
184
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
185 template <int> union C;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
186 template <int> union C;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
187
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
188 template <int> struct D; // { dg-warning "Templates::D\[^\n\r]*' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
189 template <int>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
190 class D // { dg-message "Templates::D\[^\n\r]*' defined as 'class' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
191 { public: D (); };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
192
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
193 template <int> class E; // { dg-warning "Templates::E\[^\n\r]*' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
194 template <int>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
195 struct E // { dg-message "Templates::E\[^\n\r]*' defined as 'struct' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
196 { int i; };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
197
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
198 template <int> class D;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
199 template <int> struct E;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
200
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
201 template <int>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
202 struct D; // { dg-warning "Templates::D\[^\n\r]*' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
203 // { dg-message "replace the class-key with 'class'" "hint" { target *-*-* } .-1 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
204 } // namespace Templates
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
205
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
206
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
207 namespace ExplicitSpecializations
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
208 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
209 template <int> class A;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
210 template <> class A<0>;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
211 template <> struct A<1>;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
212 template <> struct A<1> { };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
213
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
214 template <int> struct B;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
215 template <> struct B<0>;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
216 template <> class B<1>;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
217 template <> class B<2> { public: B (); };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
218
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
219 template <int> union C;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
220 template <> union C<0>;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
221
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
222 template <int> class D;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
223 template <> class D<0>; // { dg-warning "ExplicitSpecializations::D\[^\n\r]*' declared with a mismatched class-key " }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
224 template <>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
225 struct D<0> { }; // { dg-message "ExplicitSpecializations::D\[^\n\r]*' defined as 'struct' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
226
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
227 template <int> struct E;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
228 template <> struct E<0>; // { dg-warning "ExplicitSpecializations::E\[^\n\r]*' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
229 template <>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
230 class E<0> { }; // { dg-message "ExplicitSpecializations::E\[^\n\r]*' defined as 'class' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
231
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
232 template <int> struct F;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
233 template <> class F<0> { }; // { dg-message "ExplicitSpecializations::F\[^\n\r]*' defined as 'class' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
234
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
235 template <>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
236 struct F<0>; // { dg-warning "ExplicitSpecializations::F\[^\n\r]*' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
237 } // namespace ExplicitSpecializations
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
238
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
239
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
240 namespace PartialSpecializations
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
241 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
242 template <class> class A;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
243 template <class T> struct A<const T>;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
244 template <class T> struct A<volatile T>;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
245
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
246 template <class> struct B;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
247 template <class T> class B<const T>;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
248 template <class T> class B<volatile T>;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
249
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
250 template <class> class C { };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
251 template <class T> struct C<const T> { };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
252 template <class T> struct C<volatile T> { };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
253
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
254 template <class> struct D { };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
255 template <class T> class D<const T> { };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
256 template <class T> class D<volatile T> { };
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
257
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
258 template <class> class E;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
259 template <class T>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
260 struct E<const T>; // { dg-message "PartialSpecializations::E<const T>' first declared as 'struct' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
261
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
262 template <class T>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
263 class E<const T>; // { dg-warning "PartialSpecializations::E<const T>' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
264
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
265 template <class> class F;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
266 template <class T>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
267 class F<const T>; // { dg-message "PartialSpecializations::F<const T>' first declared as 'class' here" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
268 template <class T>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
269 struct F<const T>; // { dg-warning "PartialSpecializations::F<const T>' declared with a mismatched class-key" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
270 } // namespace PartialSpecializations
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
271
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
272
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
273 namespace Classes
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
274 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
275 struct G;
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
276
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
277 class G; // { dg-warning "Classes::G' declared with a mismatched class-key 'class'" }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
278 }