1; RUN: llvm-undname < %s | FileCheck %s 2 3; CHECK-NOT: Invalid mangled name 4 5?x@@3HA 6; CHECK: int x 7 8?x@@3PEAHEA 9; CHECK: int *x 10 11?x@@3PEAPEAHEA 12; CHECK: int **x 13 14?x@@3PEAY02HEA 15; CHECK: int (*x)[3] 16 17?x@@3PEAY124HEA 18; CHECK: int (*x)[3][5] 19 20?x@@3PEAY02$$CBHEA 21; CHECK: int const (*x)[3] 22 23?x@@3PEAEEA 24; CHECK: unsigned char *x 25 26?x@@3PEAY1NKM@5HEA 27; CHECK: int (*x)[3500][6] 28 29?x@@YAXMH@Z 30; CHECK: void __cdecl x(float, int) 31 32?x@@3P6AHMNH@ZEA 33; CHECK: int (__cdecl *x)(float, double, int) 34 35?x@@3P6AHP6AHM@ZN@ZEA 36; CHECK: int (__cdecl *x)(int (__cdecl *)(float), double) 37 38?x@@3P6AHP6AHM@Z0@ZEA 39; CHECK: int (__cdecl *x)(int (__cdecl *)(float), int (__cdecl *)(float)) 40 41?x@ns@@3HA 42; CHECK: int ns::x 43 44; Microsoft's undname doesn't handle Q correctly or the multiple occurrences 45; of the const modifier. So the results here differ, but ours are correct. 46?x@@3PEAHEA 47; CHECK: int *x 48 49?x@@3PEBHEB 50; CHECK: int const *x 51 52?x@@3QEAHEA 53; CHECK: int *const x 54 55?x@@3QEBHEB 56; CHECK: int const *const x 57 58 59?x@@3AEBHEB 60; CHECK: int const &x 61 62?x@@3PEAUty@@EA 63; CHECK: struct ty *x 64 65?x@@3PEATty@@EA 66; CHECK: union ty *x 67 68?x@@3PEAVty@@EA 69; CHECK: class ty *x 70 71?x@@3PEAW4ty@@EA 72; CHECK: enum ty *x 73 74?x@@3PEAV?$tmpl@H@@EA 75; CHECK: class tmpl<int> *x 76 77?x@@3PEAU?$tmpl@H@@EA 78; CHECK: struct tmpl<int> *x 79 80?x@@3PEAT?$tmpl@H@@EA 81; CHECK: union tmpl<int> *x 82 83?instance@@3Vklass@@A 84; CHECK: class klass instance 85 86?instance$initializer$@@3P6AXXZEA 87; CHECK: void (__cdecl *instance$initializer$)(void) 88 89??0klass@@QEAA@XZ 90; CHECK: __cdecl klass::klass(void) 91 92??1klass@@QEAA@XZ 93; CHECK: __cdecl klass::~klass(void) 94 95?x@@YAHPEAVklass@@AEAV1@@Z 96; CHECK: int __cdecl x(class klass *, class klass &) 97 98?x@ns@@3PEAV?$klass@HH@1@EA 99; CHECK: class ns::klass<int, int> *ns::x 100 101?fn@?$klass@H@ns@@QEBAIXZ 102; CHECK: unsigned int __cdecl ns::klass<int>::fn(void) const 103 104 105??4klass@@QEAAAEBV0@AEBV0@@Z 106; CHECK: class klass const & __cdecl klass::operator=(class klass const &) 107 108??7klass@@QEAA_NXZ 109; CHECK: bool __cdecl klass::operator!(void) 110 111??8klass@@QEAA_NAEBV0@@Z 112; CHECK: bool __cdecl klass::operator==(class klass const &) 113 114??9klass@@QEAA_NAEBV0@@Z 115; CHECK: bool __cdecl klass::operator!=(class klass const &) 116 117??Aklass@@QEAAH_K@Z 118; CHECK: int __cdecl klass::operator[](unsigned __int64) 119 120??Cklass@@QEAAHXZ 121; CHECK: int __cdecl klass::operator->(void) 122 123??Dklass@@QEAAHXZ 124; CHECK: int __cdecl klass::operator*(void) 125 126??Eklass@@QEAAHXZ 127; CHECK: int __cdecl klass::operator++(void) 128 129??Eklass@@QEAAHH@Z 130; CHECK: int __cdecl klass::operator++(int) 131 132??Fklass@@QEAAHXZ 133; CHECK: int __cdecl klass::operator--(void) 134 135??Fklass@@QEAAHH@Z 136; CHECK: int __cdecl klass::operator--(int) 137 138??Hklass@@QEAAHH@Z 139; CHECK: int __cdecl klass::operator+(int) 140 141??Gklass@@QEAAHH@Z 142; CHECK: int __cdecl klass::operator-(int) 143 144??Iklass@@QEAAHH@Z 145; CHECK: int __cdecl klass::operator&(int) 146 147??Jklass@@QEAAHH@Z 148; CHECK: int __cdecl klass::operator->*(int) 149 150??Kklass@@QEAAHH@Z 151; CHECK: int __cdecl klass::operator/(int) 152 153??Mklass@@QEAAHH@Z 154; CHECK: int __cdecl klass::operator<(int) 155 156??Nklass@@QEAAHH@Z 157; CHECK: int __cdecl klass::operator<=(int) 158 159??Oklass@@QEAAHH@Z 160; CHECK: int __cdecl klass::operator>(int) 161 162??Pklass@@QEAAHH@Z 163; CHECK: int __cdecl klass::operator>=(int) 164 165??Qklass@@QEAAHH@Z 166; CHECK: int __cdecl klass::operator,(int) 167 168??Rklass@@QEAAHH@Z 169; CHECK: int __cdecl klass::operator()(int) 170 171??Sklass@@QEAAHXZ 172; CHECK: int __cdecl klass::operator~(void) 173 174??Tklass@@QEAAHH@Z 175; CHECK: int __cdecl klass::operator^(int) 176 177??Uklass@@QEAAHH@Z 178; CHECK: int __cdecl klass::operator|(int) 179 180??Vklass@@QEAAHH@Z 181; CHECK: int __cdecl klass::operator&&(int) 182 183??Wklass@@QEAAHH@Z 184; CHECK: int __cdecl klass::operator||(int) 185 186??Xklass@@QEAAHH@Z 187; CHECK: int __cdecl klass::operator*=(int) 188 189??Yklass@@QEAAHH@Z 190; CHECK: int __cdecl klass::operator+=(int) 191 192??Zklass@@QEAAHH@Z 193; CHECK: int __cdecl klass::operator-=(int) 194 195??_0klass@@QEAAHH@Z 196; CHECK: int __cdecl klass::operator/=(int) 197 198??_1klass@@QEAAHH@Z 199; CHECK: int __cdecl klass::operator%=(int) 200 201??_2klass@@QEAAHH@Z 202; CHECK: int __cdecl klass::operator>>=(int) 203 204??_3klass@@QEAAHH@Z 205; CHECK: int __cdecl klass::operator<<=(int) 206 207??_6klass@@QEAAHH@Z 208; CHECK: int __cdecl klass::operator^=(int) 209 210??6@YAAEBVklass@@AEBV0@H@Z 211; CHECK: class klass const & __cdecl operator<<(class klass const &, int) 212 213??5@YAAEBVklass@@AEBV0@_K@Z 214; CHECK: class klass const & __cdecl operator>>(class klass const &, unsigned __int64) 215 216??2@YAPEAX_KAEAVklass@@@Z 217; CHECK: void * __cdecl operator new(unsigned __int64, class klass &) 218 219??_U@YAPEAX_KAEAVklass@@@Z 220; CHECK: void * __cdecl operator new[](unsigned __int64, class klass &) 221 222??3@YAXPEAXAEAVklass@@@Z 223; CHECK: void __cdecl operator delete(void *, class klass &) 224 225??_V@YAXPEAXAEAVklass@@@Z 226; CHECK: void __cdecl operator delete[](void *, class klass &) 227 228?A@?A0x43583946@@3VB@@B 229; CHECK: class B const `anonymous namespace'::A 230