1 // UNSUPPORTED: system-darwin
2 // RUN: %clang %target_itanium_abi_host_triple %s -c -o - -gdwarf-4 -Xclang -gsimple-template-names=mangled -Xclang -debug-forward-template-params -std=c++20 \
3 // RUN: | llvm-dwarfdump --verify -
4 // RUN: %clang %target_itanium_abi_host_triple %s -c -o - -gdwarf-4 -Xclang -gsimple-template-names=mangled -Xclang -debug-forward-template-params -std=c++20 -gmlt -fdebug-info-for-profiling \
5 // RUN: | llvm-dwarfdump --verify -
6 // RUN: %clang %target_itanium_abi_host_triple %s -c -o - -gdwarf-4 -Xclang -gsimple-template-names=mangled -Xclang -debug-forward-template-params -std=c++20 -fdebug-types-section \
7 // RUN: | llvm-dwarfdump --verify -
8 // RUN: %clang %target_itanium_abi_host_triple %s -c -o - -gdwarf-5 -Xclang -gsimple-template-names=mangled -Xclang -debug-forward-template-params -std=c++20 -fdebug-types-section \
9 // RUN: | llvm-dwarfdump --verify -
13 template<typename
...Ts
>
16 template<typename
...Ts
>
24 template<typename T
> struct ttp
{ };
27 template<template<typename
> class T
>
29 enum Enumeration
: int { Enumerator1
, Enumerator2
, Enumerator3
= 1 };
30 enum class EnumerationClass
{ Enumerator1
, Enumerator2
, Enumerator3
= 1 };
31 enum : int { AnonEnum1
, AnonEnum2
, AnonEnum3
= 1 };
32 enum EnumerationSmall
: unsigned char { kNeg
= 0xff };
34 template <typename
... Ts
>
39 template<bool b
, int i
>
42 template<typename T
, T
...A
>
45 template<typename T
, unsigned = 3>
48 template<typename T
, bool b
= false>
50 extern template class t3
<int>;
51 template class t3
<int>;
61 enum LocalEnum
{ LocalEnum1
};
63 template<typename
...T1
, typename T2
= int>
65 template<typename T1
, typename
...T2
>
69 void operator<<(int) {
75 void operator<=(int) {
77 template<typename T
= int>
78 operator t1
<float>*() {
100 void operator|(int) {
109 void operator=(int) {
112 void operator>(int) {
115 void operator,(int) {
121 void operator[](int) {
124 void operator<=>(int) {
127 void* operator new(std::size_t, T
) {
128 __builtin_unreachable();
131 void operator delete(void*, T
) {
134 void* operator new[](std::size_t, T
) {
135 __builtin_unreachable();
138 void operator delete[](void*, T
) {
141 int operator co_await() { __builtin_unreachable(); }
144 void operator"" _suff(unsigned long long) {}
145 template<template<typename
...> class T
> void f7() { }
146 template<template<typename
...> class T
, typename T2
> void f8() { }
152 __attribute__((__preferred_name__(t7i
)))
159 inline namespace inl
{
160 template<typename T
> struct t9
{ };
168 template<typename T
= void>
173 void operator_not_really() {
176 template<typename T
, T
...A
>
181 t11
<LocalEnum
, LocalEnum1
> v1
;
184 template<decltype(ns::AnonEnum1
)>
198 f1
<unsigned long long>();
203 f1
<ns::inner::udt
>();
212 f1
<outer_class::inner_class
>();
215 f3
<ns::Enumeration
, ns::Enumerator3
, (ns::Enumeration
)2>();
216 f3
<ns::EnumerationClass
, ns::EnumerationClass::Enumerator3
, (ns::EnumerationClass
)2>();
217 f3
<ns::EnumerationSmall
, ns::kNeg
>();
218 f3
<decltype(ns::AnonEnum1
), ns::AnonEnum3
, (decltype(ns::AnonEnum1
))2>();
219 f3
<LocalEnum
, LocalEnum1
>();
223 f3
<unsigned long, 1>();
224 f3
<unsigned long long, 1>();
226 f3
<unsigned int, 1>();
228 f3
<unsigned char, (char)0>();
229 f3
<signed char, (char)0>();
230 f3
<unsigned short, 1, 2>();
231 f3
<char, 0, 1, 6, 7, 13, 14, 31, 32, 33, (char)127, (char)128>();
232 f3
<__int128
, ((__int128
)9223372036854775807) * 2>();
238 f1
<t3
<t3
<decltype(L
)>>>();
241 f1
<void(int, ...)>();
245 f1
<decltype(nullptr)>();
249 f1
<const void *const *>();
259 f1
<const void*, const void*>();
263 v6
.operator<< <int>(1);
264 v6
.operator< <int>(1);
265 v6
.operator<= <int>(1);
266 v6
.operator t1
<float>*();
267 v6
.operator- <int>(3);
268 v6
.operator* <int>(3);
269 v6
.operator/ <int>(3);
270 v6
.operator% <int>(3);
271 v6
.operator^ <int>(3);
272 v6
.operator& <int>(3);
273 v6
.operator| <int>(3);
274 v6
.operator~ <int>();
275 v6
.operator! <int>();
276 v6
.operator= <int>(3);
277 v6
.operator> <int>(3);
278 v6
.operator, <int>(3);
279 v6
.operator() <int>();
280 v6
.operator[] <int>(3);
281 v6
.operator<=> <int>(3);
282 t6::operator new(0, 0);
283 t6::operator new[](0, 0);
284 t6::operator delete(nullptr, 0);
285 t6::operator delete[](nullptr, 0);
286 v6
.operator co_await
<int>();
295 ttp_user
<inner::ttp
>();
296 f1
<int*, decltype(nullptr)*>();
301 f1
<int, long, volatile char>();
302 f1
<__attribute__((__vector_size__(sizeof(int) * 2))) int>();
303 f1
<int *const volatile>();
304 f1
<const volatile void>();
305 f1
<t1
<decltype(L
)>>();
307 f1
<void (::udt::*)() const>();
308 f1
<void (::udt::*)() volatile &>();
309 f1
<void (::udt::*)() const volatile &&>();
311 f1
<void (*const)()>();
312 f1
<char const (&)[1]>();
313 f1
<void () const &>();
314 f1
<void () volatile &&>();
315 f1
<void () const volatile>();
317 f1
<int *const(&)[1]>();
318 f1
<void (::udt::* const&)()>();
319 f1
<void (*(int))(float)>();
321 f1
<void (*)() noexcept
>();
322 f1
<void (decltype(A
))>();
323 struct t8
{ decltype(A
) m
; };
324 f1
<void(t8
, decltype(A
))>();
326 operator_not_really
<int>();
329 f1
<const unsigned _BitInt(5)>();
330 f1
<void(t1
<>, t1
<>)>();
332 void fcc() __attribute__((swiftcall
));
334 int fnrt() __attribute__((noreturn
));
335 f1
<decltype(fnrt
)>();
336 f10
<ns::AnonEnum1
>();
341 f1
<decltype(&t8::mem
)>();
343 namespace complex_type_units
{
344 void external_function();
346 struct internal_type
;
348 template <void (*)() = external_function
> struct t2
;
349 template <typename
= t2
<>> class t3
{};
350 template <typename
= internal_type
, typename
= t3
<>>