1
1
// RUN: %clang_cc1 -verify -std=c++20 -emit-llvm -triple %itanium_abi_triple -o - %s -fclang-abi-compat=latest | FileCheck %s
2
- // RUN: %clang_cc1 -verify -std=c++20 -emit-llvm -triple %itanium_abi_triple -o - %s -fclang-abi-compat=16 | FileCheck %s --check-prefix=CLANG16
2
+ // RUN: %clang_cc1 -verify -std=c++20 -emit-llvm -triple %itanium_abi_triple -o - %s -fclang-abi-compat=17 | FileCheck %s --check-prefix=CLANG17
3
3
// expected-no-diagnostics
4
4
5
5
namespace test1 {
@@ -8,7 +8,7 @@ template <typename> concept C = true;
8
8
template <typename T = int > S<C<T>> f0 () { return S<C<T>>{}; }
9
9
template S<C<int >> f0<>();
10
10
// CHECK: @_ZN5test12f0IiEENS_1SIX1CIT_EEEEv(
11
- // CLANG16 : @_ZN5test12f0IiEENS_1SIL_ZNS_1CIT_EEEEEv(
11
+ // CLANG17 : @_ZN5test12f0IiEENS_1SIL_ZNS_1CIT_EEEEEv(
12
12
}
13
13
14
14
template <bool > struct S {};
@@ -18,12 +18,12 @@ template <typename, typename> concept D = true;
18
18
template <typename T = int > S<test1::C<T>> f0a () { return S<C<T>>{}; }
19
19
template S<test1::C<int >> f0a<>();
20
20
// CHECK: @_Z3f0aIiE1SIXsr5test1E1CIT_EEEv(
21
- // CLANG16 : @_Z3f0aIiE1SIL_ZN5test11CIT_EEEEv(
21
+ // CLANG17 : @_Z3f0aIiE1SIL_ZN5test11CIT_EEEEv(
22
22
23
23
template <typename T = int > S<C<T>> f0 () { return S<C<T>>{}; }
24
24
template S<C<int >> f0<>();
25
25
// CHECK: @_Z2f0IiE1SIX1CIT_EEEv(
26
- // CLANG16 : @_Z2f0IiE1SIL_Z1CIT_EEEv(
26
+ // CLANG17 : @_Z2f0IiE1SIL_Z1CIT_EEEv(
27
27
28
28
template <typename T> concept True = true ;
29
29
@@ -56,25 +56,25 @@ namespace test2 {
56
56
// CHECK-LABEL: define {{.*}}@{{.*}}test2{{.*}}use
57
57
void use () {
58
58
// CHECK: call {{.*}}@_ZN5test21AIiEF1fEzQ4TrueIT_E(
59
- // CLANG16 : call {{.*}}@_ZN5test21fEz(
59
+ // CLANG17 : call {{.*}}@_ZN5test21fEz(
60
60
f (ai);
61
61
// CHECK: call {{.*}}@_ZN5test2F1gIvEEvzQaa4TrueIT_E4TrueITL0__E(
62
- // CLANG16 : call {{.*}}@_ZN5test21gIvEEvz(
62
+ // CLANG17 : call {{.*}}@_ZN5test21gIvEEvz(
63
63
g (ai);
64
64
// CHECK: call {{.*}}@_ZN5test21hIvEEvzQ4TrueITL0__E(
65
- // CLANG16 : call {{.*}}@_ZN5test21hIvEEvz(
65
+ // CLANG17 : call {{.*}}@_ZN5test21hIvEEvz(
66
66
h (ai);
67
67
// CHECK: call {{.*}}@_ZN5test2F1iIvQaa4TrueIT_E4TrueITL0__EEEvz(
68
- // CLANG16 : call {{.*}}@_ZN5test21iIvEEvz(
68
+ // CLANG17 : call {{.*}}@_ZN5test21iIvEEvz(
69
69
i (ai);
70
70
// CHECK: call {{.*}}@_ZN5test21jIvQ4TrueITL0__EEEvz(
71
- // CLANG16 : call {{.*}}@_ZN5test21jIvEEvz(
71
+ // CLANG17 : call {{.*}}@_ZN5test21jIvEEvz(
72
72
j (ai);
73
73
// CHECK: call {{.*}}@_ZN5test2F1kITk4TruevQ4TrueIT_EEEvz(
74
- // CLANG16 : call {{.*}}@_ZN5test21kIvEEvz(
74
+ // CLANG17 : call {{.*}}@_ZN5test21kIvEEvz(
75
75
k (ai);
76
76
// CHECK: call {{.*}}@_ZN5test21lITk4TruevEEvz(
77
- // CLANG16 : call {{.*}}@_ZN5test21lIvEEvz(
77
+ // CLANG17 : call {{.*}}@_ZN5test21lIvEEvz(
78
78
l (ai);
79
79
}
80
80
}
@@ -84,51 +84,51 @@ namespace test3 {
84
84
template <auto > void d () {}
85
85
template void d<0 >();
86
86
// CHECK: define {{.*}}@_ZN5test31dITnDaLi0EEEvv(
87
- // CLANG16 : define {{.*}}@_ZN5test31dILi0EEEvv(
87
+ // CLANG17 : define {{.*}}@_ZN5test31dILi0EEEvv(
88
88
89
89
template <decltype (auto )> void e () {}
90
90
template void e<0 >();
91
91
// CHECK: define {{.*}}@_ZN5test31eITnDcLi0EEEvv(
92
- // CLANG16 : define {{.*}}@_ZN5test31eILi0EEEvv(
92
+ // CLANG17 : define {{.*}}@_ZN5test31eILi0EEEvv(
93
93
94
94
// Constrained auto.
95
95
template <C auto > void f () {}
96
96
template void f<0 >();
97
97
// CHECK: define {{.*}}@_ZN5test31fITnDk1CLi0EEEvv(
98
- // CLANG16 : define {{.*}}@_ZN5test31fILi0EEEvv(
98
+ // CLANG17 : define {{.*}}@_ZN5test31fILi0EEEvv(
99
99
100
100
template <D<int > auto > void g () {}
101
101
template void g<0 >();
102
102
// CHECK: define {{.*}}@_ZN5test31gITnDk1DIiELi0EEEvv(
103
- // CLANG16 : define {{.*}}@_ZN5test31gILi0EEEvv(
103
+ // CLANG17 : define {{.*}}@_ZN5test31gILi0EEEvv(
104
104
105
105
template <typename T, D<T> auto > void h () {}
106
106
template void h<int , 0 >();
107
107
// CHECK: define {{.*}}@_ZN5test31hIiTnDk1DIT_ELi0EEEvv(
108
- // CLANG16 : define {{.*}}@_ZN5test31hIiLi0EEEvv(
108
+ // CLANG17 : define {{.*}}@_ZN5test31hIiLi0EEEvv(
109
109
110
110
template <typename T> void i (decltype (new C auto (T()))) {}
111
111
template void i<int >(int *);
112
112
// CHECK: define {{.*}}@_ZN5test31iIiEEvDTnw_Dk1CpicvT__EEE(
113
- // CLANG16 : define {{.*}}@_ZN5test31iIiEEvDTnw_DapicvT__EEE(
113
+ // CLANG17 : define {{.*}}@_ZN5test31iIiEEvDTnw_DapicvT__EEE(
114
114
115
115
template <typename T> void j (decltype (new C decltype (auto )(T()))) {}
116
116
template void j<int >(int *);
117
117
// CHECK: define {{.*}}@_ZN5test31jIiEEvDTnw_DK1CpicvT__EEE(
118
- // CLANG16 : define {{.*}}@_ZN5test31jIiEEvDTnw_DcpicvT__EEE(
118
+ // CLANG17 : define {{.*}}@_ZN5test31jIiEEvDTnw_DcpicvT__EEE(
119
119
}
120
120
121
121
namespace test4 {
122
122
// Constrained type parameters.
123
123
template <C> void f () {}
124
124
template void f<int >();
125
125
// CHECK: define {{.*}}@_ZN5test41fITk1CiEEvv(
126
- // CLANG16 : define {{.*}}@_ZN5test41fIiEEvv(
126
+ // CLANG17 : define {{.*}}@_ZN5test41fIiEEvv(
127
127
128
128
template <D<int >> void g () {}
129
129
template void g<int >();
130
130
// CHECK: define {{.*}}@_ZN5test41gITk1DIiEiEEvv(
131
- // CLANG16 : define {{.*}}@_ZN5test41gIiEEvv(
131
+ // CLANG17 : define {{.*}}@_ZN5test41gIiEEvv(
132
132
}
133
133
134
134
namespace test5 {
@@ -175,32 +175,32 @@ namespace test5 {
175
175
176
176
template <template <typename ...> typename > void p () {}
177
177
// CHECK: define {{.*}}@_ZN5test51pINS_1AEEEvv(
178
- // CLANG16 : define {{.*}}@_ZN5test51pINS_1AEEEvv(
178
+ // CLANG17 : define {{.*}}@_ZN5test51pINS_1AEEEvv(
179
179
template void p<A>();
180
180
// CHECK: define {{.*}}@_ZN5test51pITtTpTyENS_1BEEEvv(
181
- // CLANG16 : define {{.*}}@_ZN5test51pINS_1BEEEvv(
181
+ // CLANG17 : define {{.*}}@_ZN5test51pINS_1BEEEvv(
182
182
template void p<B>();
183
183
184
184
template <template <typename , typename > typename > void q () {}
185
185
// CHECK: define {{.*}}@_ZN5test51qITtTyTyENS_1AEEEvv(
186
- // CLANG16 : define {{.*}}@_ZN5test51qINS_1AEEEvv(
186
+ // CLANG17 : define {{.*}}@_ZN5test51qINS_1AEEEvv(
187
187
template void q<A>();
188
188
// CHECK: define {{.*}}@_ZN5test51qINS_1BEEEvv(
189
- // CLANG16 : define {{.*}}@_ZN5test51qINS_1BEEEvv(
189
+ // CLANG17 : define {{.*}}@_ZN5test51qINS_1BEEEvv(
190
190
template void q<B>();
191
191
}
192
192
193
193
namespace test6 {
194
194
// Abbreviated function templates.
195
195
void f (C auto ) {}
196
196
// CHECK: define {{.*}}@_ZN5test61fITk1CiEEvT_(
197
- // CLANG16 : define {{.*}}@_ZN5test61fIiEEvT_(
197
+ // CLANG17 : define {{.*}}@_ZN5test61fIiEEvT_(
198
198
template void f (int );
199
199
200
200
template <typename T>
201
201
void g (D<T> auto ) {}
202
202
// CHECK: define {{.*}}@_ZN5test61gIiTk1DIT_EiEEvT0_(
203
- // CLANG16 : define {{.*}}@_ZN5test61gIiiEEvT0_(
203
+ // CLANG17 : define {{.*}}@_ZN5test61gIiiEEvT0_(
204
204
template void g<int >(int );
205
205
}
206
206
0 commit comments