Zachary Turner | cbb0dfe | 2018-07-30 23:22:39 +0000 | [diff] [blame] | 1 | ; These tests are based on clang/test/CodeGenCXX/mangle-ms-cxx11.cpp |
| 2 | |
Zachary Turner | ef42001 | 2018-07-30 23:02:10 +0000 | [diff] [blame] | 3 | ; RUN: llvm-undname < %s | FileCheck %s |
| 4 | |
| 5 | ; CHECK-NOT: Invalid mangled name |
| 6 | |
| 7 | ?a@FTypeWithQuals@@3U?$S@$$A8@@BAHXZ@1@A |
| 8 | ; CHECK: struct FTypeWithQuals::S<int __cdecl(void) const> FTypeWithQuals::a |
| 9 | |
| 10 | ?b@FTypeWithQuals@@3U?$S@$$A8@@CAHXZ@1@A |
| 11 | ; CHECK: struct FTypeWithQuals::S<int __cdecl(void) volatile> FTypeWithQuals::b |
| 12 | |
| 13 | ?c@FTypeWithQuals@@3U?$S@$$A8@@IAAHXZ@1@A |
| 14 | ; CHECK: struct FTypeWithQuals::S<int __cdecl(void) __restrict> FTypeWithQuals::c |
| 15 | |
| 16 | ?d@FTypeWithQuals@@3U?$S@$$A8@@GBAHXZ@1@A |
| 17 | ; CHECK: struct FTypeWithQuals::S<int __cdecl(void) const &> FTypeWithQuals::d |
| 18 | |
| 19 | ?e@FTypeWithQuals@@3U?$S@$$A8@@GCAHXZ@1@A |
| 20 | ; CHECK: struct FTypeWithQuals::S<int __cdecl(void) volatile &> FTypeWithQuals::e |
| 21 | |
| 22 | ?f@FTypeWithQuals@@3U?$S@$$A8@@IGAAHXZ@1@A |
| 23 | ; CHECK: struct FTypeWithQuals::S<int __cdecl(void) __restrict &> FTypeWithQuals::f |
| 24 | |
| 25 | ?g@FTypeWithQuals@@3U?$S@$$A8@@HBAHXZ@1@A |
| 26 | ; CHECK: struct FTypeWithQuals::S<int __cdecl(void) const &&> FTypeWithQuals::g |
| 27 | |
| 28 | ?h@FTypeWithQuals@@3U?$S@$$A8@@HCAHXZ@1@A |
| 29 | ; CHECK: struct FTypeWithQuals::S<int __cdecl(void) volatile &&> FTypeWithQuals::h |
| 30 | |
| 31 | ?i@FTypeWithQuals@@3U?$S@$$A8@@IHAAHXZ@1@A |
| 32 | ; CHECK: struct FTypeWithQuals::S<int __cdecl(void) __restrict &&> FTypeWithQuals::i |
| 33 | |
| 34 | ?j@FTypeWithQuals@@3U?$S@$$A6AHXZ@1@A |
| 35 | ; CHECK: struct FTypeWithQuals::S<int __cdecl(void)> FTypeWithQuals::j |
| 36 | |
| 37 | ?k@FTypeWithQuals@@3U?$S@$$A8@@GAAHXZ@1@A |
| 38 | ; CHECK: struct FTypeWithQuals::S<int __cdecl(void) &> FTypeWithQuals::k |
| 39 | |
| 40 | ?l@FTypeWithQuals@@3U?$S@$$A8@@HAAHXZ@1@A |
| 41 | ; CHECK: struct FTypeWithQuals::S<int __cdecl(void) &&> FTypeWithQuals::l |
| 42 | |
| 43 | ?Char16Var@@3_SA |
| 44 | ; CHECK: char16_t Char16Var |
| 45 | |
| 46 | ?Char32Var@@3_UA |
| 47 | ; CHECK: char32_t Char32Var |
| 48 | |
| 49 | ?LRef@@YAXAAH@Z |
| 50 | ; CHECK: void __cdecl LRef(int &) |
| 51 | |
| 52 | ?RRef@@YAH$$QAH@Z |
| 53 | ; CHECK: int __cdecl RRef(int &&) |
| 54 | |
| 55 | ?Null@@YAX$$T@Z |
| 56 | ; CHECK: void __cdecl Null(std::nullptr_t) |
| 57 | |
| 58 | ?fun@PR18022@@YA?AU<unnamed-type-a>@1@U21@0@Z |
| 59 | ; CHECK: struct PR18022::<unnamed-type-a> __cdecl PR18022::fun(struct PR18022::<unnamed-type-a>, struct PR18022::<unnamed-type-a>) |
| 60 | |
| 61 | ; First, we have the static local variable of type "<lambda_1>" inside of "define_lambda". |
| 62 | ; decltype(lambda), where lambda = [] { static int local=42; return 42; }; |
| 63 | ?lambda@?1??define_lambda@@YAHXZ@4V<lambda_1>@?0??1@YAHXZ@A |
| 64 | ; CHECK: class `int __cdecl define_lambda(void)'::`1'::<lambda_1> `int __cdecl define_lambda(void)'::`2'::lambda |
| 65 | |
| 66 | ; Next, we have the "operator()" for "<lambda_1>" which is inside of "define_lambda". |
| 67 | ??R<lambda_1>@?0??define_lambda@@YAHXZ@QBE@XZ |
| 68 | ; CHECK: __thiscall `int __cdecl define_lambda(void)'::`1'::<lambda_1>::operator()(void) const |
| 69 | |
| 70 | ; Finally, we have the local which is inside of "<lambda_1>" which is inside of "define_lambda". |
| 71 | ?local@?2???R<lambda_1>@?0??define_lambda@@YAHXZ@QBE@XZ@4HA |
| 72 | ; CHECK: __thiscall `int __cdecl define_lambda(void)'::`1'::<lambda_1>::operator()(void) const |
| 73 | |
| 74 | ??$use_lambda_arg@V<lambda_1>@?0??call_with_lambda_arg1@@YAXXZ@@@YAXV<lambda_1>@?0??call_with_lambda_arg1@@YAXXZ@@Z |
| 75 | ; CHECK: void __cdecl use_lambda_arg<class `void __cdecl call_with_lambda_arg1(void)'::`1'::<lambda_1>>(class `void __cdecl call_with_lambda_arg1(void)'::`1'::<lambda_1>) |
| 76 | |
| 77 | ?foo@A@PR19361@@QIGAEXXZ |
| 78 | ; CHECK: void __thiscall PR19361::A::foo(void) __restrict & |
| 79 | |
| 80 | ?foo@A@PR19361@@QIHAEXXZ |
| 81 | ; CHECK: void __thiscall PR19361::A::foo(void) __restrict && |
| 82 | |
| 83 | ??__K_deg@@YAHO@Z |
| 84 | ; CHECK: int __cdecl operator ""_deg(long double) |
| 85 | |
| 86 | ??$templ_fun_with_pack@$S@@YAXXZ |
| 87 | ; CHECK: void __cdecl templ_fun_with_pack<>(void) |
| 88 | |
Zachary Turner | 25cfd0d | 2018-08-30 20:53:29 +0000 | [diff] [blame] | 89 | ; $$Z is a parameter pack separator. |
| 90 | ??$func@H$$ZH@@YAHAEBU?$Foo@H@@0@Z |
| 91 | ; CHECK: int __cdecl func<int, int>(struct Foo<int> const &, struct Foo<int> const &) |
| 92 | |
Zachary Turner | ef42001 | 2018-07-30 23:02:10 +0000 | [diff] [blame] | 93 | ??$templ_fun_with_ty_pack@$$$V@@YAXXZ |
| 94 | ; CHECK: void __cdecl templ_fun_with_ty_pack<>(void) |
| 95 | ??$templ_fun_with_ty_pack@$$V@@YAXXZ |
| 96 | ; CHECK: void __cdecl templ_fun_with_ty_pack<>(void) |
| 97 | |
| 98 | ??$f@$$YAliasA@PR20047@@@PR20047@@YAXXZ |
| 99 | ; CHECK: void __cdecl PR20047::f<PR20047::AliasA>(void) |
| 100 | |
| 101 | ?f@UnnamedType@@YAXAAU<unnamed-type-TD>@A@1@@Z |
| 102 | ; CHECK: void __cdecl UnnamedType::f(struct UnnamedType::A::<unnamed-type-TD> &) |
| 103 | |
| 104 | ?f@UnnamedType@@YAXPAW4<unnamed-type-e>@?$B@H@1@@Z |
| 105 | ; CHECK: void __cdecl UnnamedType::f(enum UnnamedType::B<int>::<unnamed-type-e> *) |
| 106 | |
| 107 | ??$f@W4<unnamed-type-E>@?1??g@PR24651@@YAXXZ@@PR24651@@YAXW4<unnamed-type-E>@?1??g@0@YAXXZ@@Z |
Zachary Turner | 6e073ca | 2018-08-08 17:17:04 +0000 | [diff] [blame] | 108 | ; CHECK: void __cdecl PR24651::f<enum `void __cdecl PR24651::g(void)'::`2'::<unnamed-type-E>>(enum `void __cdecl PR24651::g(void)'::`2'::<unnamed-type-E>) |
Zachary Turner | ef42001 | 2018-07-30 23:02:10 +0000 | [diff] [blame] | 109 | |
| 110 | ??$f@T<unnamed-type-$S1>@PR18204@@@PR18204@@YAHPAT<unnamed-type-$S1>@0@@Z |
Zachary Turner | 6e073ca | 2018-08-08 17:17:04 +0000 | [diff] [blame] | 111 | ; CHECK: int __cdecl PR18204::f<union PR18204::<unnamed-type-$S1>>(union PR18204::<unnamed-type-$S1> *) |
Zachary Turner | ef42001 | 2018-07-30 23:02:10 +0000 | [diff] [blame] | 112 | |
| 113 | ??R<lambda_0>@?0??PR26105@@YAHXZ@QBE@H@Z |
Nico Weber | 65bbcca | 2018-11-13 20:18:26 +0000 | [diff] [blame] | 114 | ; CHECK: public: __thiscall `int __cdecl PR26105(void)'::`1'::<lambda_0>::operator()(int) const |
Zachary Turner | ef42001 | 2018-07-30 23:02:10 +0000 | [diff] [blame] | 115 | |
| 116 | ??R<lambda_1>@?0???R<lambda_0>@?0??PR26105@@YAHXZ@QBE@H@Z@QBE@H@Z |
Nico Weber | 65bbcca | 2018-11-13 20:18:26 +0000 | [diff] [blame] | 117 | ; CHECK: public: __thiscall `public: __thiscall `int __cdecl PR26105(void)'::`1'::<lambda_0>::operator()(int) const'::`1'::<lambda_1>::operator()(int) const |
Zachary Turner | ef42001 | 2018-07-30 23:02:10 +0000 | [diff] [blame] | 118 | |
| 119 | ?unaligned_foo1@@YAPFAHXZ |
| 120 | ; CHECK: int __unaligned * __cdecl unaligned_foo1(void) |
| 121 | |
| 122 | ?unaligned_foo2@@YAPFAPFAHXZ |
| 123 | ; CHECK: int __unaligned *__unaligned * __cdecl unaligned_foo2(void) |
| 124 | |
| 125 | ?unaligned_foo3@@YAHXZ |
| 126 | ; CHECK: int __cdecl unaligned_foo3(void) |
| 127 | |
| 128 | ?unaligned_foo4@@YAXPFAH@Z |
| 129 | ; CHECK: void __cdecl unaligned_foo4(int __unaligned *) |
| 130 | |
| 131 | ?unaligned_foo5@@YAXPIFAH@Z |
| 132 | ; CHECK: void __cdecl unaligned_foo5(int __unaligned *__restrict) |
| 133 | |
| 134 | ??$unaligned_foo6@PAH@@YAPAHPAH@Z |
| 135 | ; CHECK: int * __cdecl unaligned_foo6<int *>(int *) |
| 136 | |
| 137 | ??$unaligned_foo6@PFAH@@YAPFAHPFAH@Z |
| 138 | ; CHECK: int __unaligned * __cdecl unaligned_foo6<int __unaligned *>(int __unaligned *) |
| 139 | |
| 140 | ?unaligned_foo8@unaligned_foo8_S@@QFCEXXZ |
| 141 | ; CHECK: void __thiscall unaligned_foo8_S::unaligned_foo8(void) volatile __unaligned |
| 142 | |
| 143 | ??R<lambda_1>@x@A@PR31197@@QBE@XZ |
| 144 | ; CHECK: __thiscall PR31197::A::x::<lambda_1>::operator()(void) const |
| 145 | |
| 146 | ?white@?1???R<lambda_1>@x@A@PR31197@@QBE@XZ@4HA |
Nico Weber | 65bbcca | 2018-11-13 20:18:26 +0000 | [diff] [blame] | 147 | ; CHECK: int `public: __thiscall PR31197::A::x::<lambda_1>::operator()(void) const'::`2'::white |
Zachary Turner | ef42001 | 2018-07-30 23:02:10 +0000 | [diff] [blame] | 148 | |
| 149 | ?f@@YAXW4<unnamed-enum-enumerator>@@@Z |
| 150 | ; CHECK: void __cdecl f(enum <unnamed-enum-enumerator>) |