annotate gcc/testsuite/g++.dg/warn/Wmismatched-tags-5.C @ 152:2b5abeee2509

update gcc11
author anatofuz
date Mon, 25 May 2020 07:50:57 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
152
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
1 /* PR c++/93810 - missing -Wmismatched-tags and -Wredundant-tags on a typedef
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
2 of an implicit class template specialization
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
3 { dg-do compile }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
4 { dg-options "-Wall -Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
5 { dg-require-effective-target c++11 } */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
6
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
7 class A; // { dg-message "declared as 'class'" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
8 typedef A A0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
9 typedef class A A0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
10 typedef struct A A0; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
11
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
12 template <int> struct B; // { dg-message "declared as 'struct'" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
13 typedef B<0> B0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
14 typedef class B<0> B0; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
15 typedef struct B<0> B0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
16
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
17
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
18 // Exercise member types of templates with non-type arguments.
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
19 template <int> struct CN; // { dg-message "declared as 'struct'" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
20
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
21 template <int N>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
22 struct X_CNp1 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
23 typedef CN<N + 1> CNp1;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
24 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
25
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
26 template <int N>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
27 struct X_class_CNp1 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
28 typedef class CN<N + 1> CNp1; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
29 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
30
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
31 template <int N>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
32 struct X_struct_CNp1 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
33 typedef struct CN<N + 1> CNp1;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
34 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
35
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
36
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
37 // Exercise partial specialization of templates with member types.
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
38 template <class> class CT1;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
39 template <class T> struct CT1<T*> { };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
40 template <class T> struct CT1<T**> { };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
41 template <class T> class CT1<T***> { };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
42
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
43 template <class> struct CT2;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
44 template <class T> struct CT2<T*> {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
45 // Expect class-key to match the primary.
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
46 CT1<T> ct1_0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
47 class CT1<T> ct1_1;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
48 struct CT1<T> ct1_2; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
49
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
50 // Expect class-key to match the CT1<T*> partial specialization.
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
51 CT1<T*> ct1p1_0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
52 class CT1<T*> ct1p1_1; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
53 struct CT1<T*> ct1p1_2;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
54
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
55 // Expect class-key to match the CT1<T**> partial specialization.
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
56 CT1<T**> ct1p2_0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
57 class CT1<T**> ct1p2_1; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
58 struct CT1<T**> ct1p2_2;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
59
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
60 // Expect class-key to match the CT1<T***> partial specialization.
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
61 CT1<T***> ct1p3_0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
62 class CT1<T***> ct1p3_1;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
63 struct CT1<T***> ct1p3_2; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
64
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
65 // Expect class-key to still match the CT1<T***> partial specialization.
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
66 CT1<T****> ct1p4_0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
67 class CT1<T****> ct1p4_1;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
68 struct CT1<T****> ct1p4_2; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
69 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
70
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
71 // Exercise many partial specializations (since the class-key for each
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
72 // must be tracked separately from the others).
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
73 template <class> class D;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
74 template <class T> struct D<T*>;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
75 template <class T> class D<T&>;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
76 template <class T> struct D<const T*>;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
77 template <class T> class D<const T&>;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
78 template <class T> struct D<volatile T*>;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
79 template <class T> class D<volatile T&>;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
80 template <class T> struct D<const volatile T*>;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
81 template <class T> class D<const volatile T&>;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
82
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
83 typedef class D<int*> DIP; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
84 typedef struct D<int*> DIP;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
85 typedef class D<int*> DIP; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
86 typedef struct D<int*> DIP;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
87
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
88 typedef class D<int&> DIR;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
89 typedef struct D<int&> DIR; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
90 typedef class D<int&> DIR;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
91
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
92
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
93 typedef struct D<const int*> DCIP;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
94 typedef class D<const int*> DCIP; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
95 typedef struct D<const int*> DCIP;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
96
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
97 typedef struct D<const int&> DCIR; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
98 typedef class D<const int&> DCIR;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
99 typedef struct D<const int&> DCIR; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
100
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
101
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
102 typedef struct D<volatile int*> DVIP;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
103 typedef class D<volatile int*> DVIP; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
104 typedef struct D<volatile int*> DVIP;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
105
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
106 typedef struct D<volatile int&> DVIR; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
107 typedef class D<volatile int&> DVIR;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
108 typedef struct D<volatile int&> DVIR; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
109
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
110
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
111 typedef struct D<const volatile int*> DCVIP;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
112 typedef class D<const volatile int*> DCVIP; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
113 typedef struct D<const volatile int*> DCVIP;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
114
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
115 typedef struct D<const volatile int&> DCVIR; // { dg-warning "-Wmismatched-tags" }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
116 typedef class D<const volatile int&> DCVIR;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
117 typedef struct D<const volatile int&> DCVIR; // { dg-warning "-Wmismatched-tags" }