1
- // RUN: %clang %target_itanium_abi_host_triple %s -c -o - -g -Xclang -gsimple-template-names=mangled -Xclang -debug-forward-template-params \
1
+ // RUN: %clang %target_itanium_abi_host_triple %s -c -o - -g -Xclang -gsimple-template-names=mangled -Xclang -debug-forward-template-params -std=c++20 \
2
2
// RUN: | llvm-dwarfdump --verify -
3
+ #include < cstdint>
3
4
template <typename ...Ts>
4
5
struct t1 {
5
6
};
@@ -67,7 +68,70 @@ struct t6 {
67
68
operator t1<float >*() {
68
69
return nullptr ;
69
70
}
71
+ template <typename T>
72
+ void operator -(int ) {
73
+ }
74
+ template <typename T>
75
+ void operator *(int ) {
76
+ }
77
+ template <typename T>
78
+ void operator /(int ) {
79
+ }
80
+ template <typename T>
81
+ void operator %(int ) {
82
+ }
83
+ template <typename T>
84
+ void operator ^(int ) {
85
+ }
86
+ template <typename T>
87
+ void operator &(int ) {
88
+ }
89
+ template <typename T>
90
+ void operator |(int ) {
91
+ }
92
+ template <typename T>
93
+ void operator ~() {
94
+ }
95
+ template <typename T>
96
+ void operator !() {
97
+ }
98
+ template <typename T>
99
+ void operator =(int ) {
100
+ }
101
+ template <typename T>
102
+ void operator >(int ) {
103
+ }
104
+ template <typename T>
105
+ void operator ,(int ) {
106
+ }
107
+ template <typename T>
108
+ void operator ()() {
109
+ }
110
+ template <typename T>
111
+ void operator [](int ) {
112
+ }
113
+ template <typename T>
114
+ void operator <=>(int ) {
115
+ }
116
+ template <typename T>
117
+ void * operator new (std::size_t , T) {
118
+ __builtin_unreachable ();
119
+ }
120
+ template <typename T>
121
+ void operator delete (void *, T) {
122
+ }
123
+ template <typename T>
124
+ void * operator new [](std::size_t , T) {
125
+ __builtin_unreachable ();
126
+ }
127
+ template <typename T>
128
+ void operator delete[] (void *, T) {
129
+ }
130
+ template <typename T>
131
+ int operator co_await () { __builtin_unreachable (); }
132
+
70
133
};
134
+ void operator " " _suff(unsigned long long ) {}
71
135
template <template <typename ...> class T > void f7 () { }
72
136
template <template <typename ...> class T , typename T2> void f8 () { }
73
137
template <typename T>
@@ -94,6 +158,11 @@ struct t10 {
94
158
template <typename T = void >
95
159
t10 () { }
96
160
};
161
+
162
+ template <typename T>
163
+ void operator_not_really () {
164
+ }
165
+
97
166
int main () {
98
167
struct { } A;
99
168
auto L = []{};
@@ -127,7 +196,7 @@ int main() {
127
196
f3<decltype (ns::AnonEnum1), ns::AnonEnum3, (decltype (ns::AnonEnum1))2 >();
128
197
f3<int *, &i>();
129
198
f3<int *, nullptr >();
130
- // t4<3> v2;
199
+ t4<3 > v2;
131
200
f3<unsigned long , 1 >();
132
201
f3<unsigned long long , 1 >();
133
202
f3<long , 1 >();
@@ -169,6 +238,27 @@ int main() {
169
238
v6.operator < <int >(1 );
170
239
v6.operator <= <int >(1 );
171
240
v6.operator t1<float >*();
241
+ v6.operator - <int >(3 );
242
+ v6.operator * <int >(3 );
243
+ v6.operator / <int >(3 );
244
+ v6.operator % <int >(3 );
245
+ v6.operator ^ <int >(3 );
246
+ v6.operator & <int >(3 );
247
+ v6.operator | <int >(3 );
248
+ v6.operator ~ <int >();
249
+ v6.operator ! <int >();
250
+ v6.operator = <int >(3 );
251
+ v6.operator > <int >(3 );
252
+ v6.operator , <int >(3 );
253
+ v6.operator () <int >();
254
+ v6.operator [] <int >(3 );
255
+ v6.operator <=> <int >(3 );
256
+ t6::operator new (0 , 0 );
257
+ t6::operator new [](0 , 0 );
258
+ t6::operator delete (nullptr , 0 );
259
+ t6::operator delete[] (nullptr , 0 );
260
+ v6.operator co_await <int >();
261
+ 42_suff;
172
262
struct t7 { };
173
263
f1<t7>();
174
264
f1<int (&)[3 ]>();
@@ -207,6 +297,7 @@ int main() {
207
297
struct t8 { decltype (A) m; };
208
298
f1<void (t8, decltype (A))>();
209
299
f1<void (t8)>();
300
+ operator_not_really<int >();
210
301
}
211
302
void t8::mem () {
212
303
struct t7 { };
0 commit comments