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@@3PEAUty@@EA 69 ; CHECK: struct ty *x 70 71 ?x@@3PEAW4ty@@EA 72 ; CHECK: enum ty *x 73 74 ?x@@3PEAVty@@EA 75 ; CHECK: class ty *x 76 77 ?x@@3PEAV?$tmpl@H@@EA 78 ; CHECK: class tmpl<int> *x 79 80 ?x@@3PEAU?$tmpl@H@@EA 81 ; CHECK: struct tmpl<int> *x 82 83 ?x@@3PEAT?$tmpl@H@@EA 84 ; CHECK: union tmpl<int> *x 85 86 ?instance@@3Vklass@@A 87 ; CHECK: class klass instance 88 89 ?instance$initializer$@@3P6AXXZEA 90 ; CHECK: void (__cdecl *instance$initializer$)(void) 91 92 ??0klass@@QEAA@XZ 93 ; CHECK: __cdecl klass::klass(void) 94 95 ??1klass@@QEAA@XZ 96 ; CHECK: __cdecl klass::~klass(void) 97 98 ?x@@YAHPEAVklass@@AEAV1@@Z 99 ; CHECK: int __cdecl x(class klass *, class klass &) 100 101 ?x@ns@@3PEAV?$klass@HH@1@EA 102 ; CHECK: class ns::klass<int, int> *ns::x 103 104 ?fn@?$klass@H@ns@@QEBAIXZ 105 ; CHECK: unsigned int __cdecl ns::klass<int>::fn(void) const 106 107 108 ??4klass@@QEAAAEBV0@AEBV0@@Z 109 ; CHECK: class klass const & __cdecl klass::operator=(class klass const &) 110 111 ??7klass@@QEAA_NXZ 112 ; CHECK: bool __cdecl klass::operator!(void) 113 114 ??8klass@@QEAA_NAEBV0@@Z 115 ; CHECK: bool __cdecl klass::operator==(class klass const &) 116 117 ??9klass@@QEAA_NAEBV0@@Z 118 ; CHECK: bool __cdecl klass::operator!=(class klass const &) 119 120 ??Aklass@@QEAAH_K@Z 121 ; CHECK: int __cdecl klass::operator[](unsigned __int64) 122 123 ??Cklass@@QEAAHXZ 124 ; CHECK: int __cdecl klass::operator->(void) 125 126 ??Dklass@@QEAAHXZ 127 ; CHECK: int __cdecl klass::operator*(void) 128 129 ??Eklass@@QEAAHXZ 130 ; CHECK: int __cdecl klass::operator++(void) 131 132 ??Eklass@@QEAAHH@Z 133 ; CHECK: int __cdecl klass::operator++(int) 134 135 ??Fklass@@QEAAHXZ 136 ; CHECK: int __cdecl klass::operator--(void) 137 138 ??Fklass@@QEAAHH@Z 139 ; CHECK: int __cdecl klass::operator--(int) 140 141 ??Hklass@@QEAAHH@Z 142 ; CHECK: int __cdecl klass::operator+(int) 143 144 ??Gklass@@QEAAHH@Z 145 ; CHECK: int __cdecl klass::operator-(int) 146 147 ??Iklass@@QEAAHH@Z 148 ; CHECK: int __cdecl klass::operator&(int) 149 150 ??Jklass@@QEAAHH@Z 151 ; CHECK: int __cdecl klass::operator->*(int) 152 153 ??Kklass@@QEAAHH@Z 154 ; CHECK: int __cdecl klass::operator/(int) 155 156 ??Mklass@@QEAAHH@Z 157 ; CHECK: int __cdecl klass::operator<(int) 158 159 ??Nklass@@QEAAHH@Z 160 ; CHECK: int __cdecl klass::operator<=(int) 161 162 ??Oklass@@QEAAHH@Z 163 ; CHECK: int __cdecl klass::operator>(int) 164 165 ??Pklass@@QEAAHH@Z 166 ; CHECK: int __cdecl klass::operator>=(int) 167 168 ??Qklass@@QEAAHH@Z 169 ; CHECK: int __cdecl klass::operator,(int) 170 171 ??Rklass@@QEAAHH@Z 172 ; CHECK: int __cdecl klass::operator()(int) 173 174 ??Sklass@@QEAAHXZ 175 ; CHECK: int __cdecl klass::operator~(void) 176 177 ??Tklass@@QEAAHH@Z 178 ; CHECK: int __cdecl klass::operator^(int) 179 180 ??Uklass@@QEAAHH@Z 181 ; CHECK: int __cdecl klass::operator|(int) 182 183 ??Vklass@@QEAAHH@Z 184 ; CHECK: int __cdecl klass::operator&&(int) 185 186 ??Wklass@@QEAAHH@Z 187 ; CHECK: int __cdecl klass::operator||(int) 188 189 ??Xklass@@QEAAHH@Z 190 ; CHECK: int __cdecl klass::operator*=(int) 191 192 ??Yklass@@QEAAHH@Z 193 ; CHECK: int __cdecl klass::operator+=(int) 194 195 ??Zklass@@QEAAHH@Z 196 ; CHECK: int __cdecl klass::operator-=(int) 197 198 ??_0klass@@QEAAHH@Z 199 ; CHECK: int __cdecl klass::operator/=(int) 200 201 ??_1klass@@QEAAHH@Z 202 ; CHECK: int __cdecl klass::operator%=(int) 203 204 ??_2klass@@QEAAHH@Z 205 ; CHECK: int __cdecl klass::operator>>=(int) 206 207 ??_3klass@@QEAAHH@Z 208 ; CHECK: int __cdecl klass::operator<<=(int) 209 210 ??_6klass@@QEAAHH@Z 211 ; CHECK: int __cdecl klass::operator^=(int) 212 213 ??6@YAAEBVklass@@AEBV0@H@Z 214 ; CHECK: class klass const & __cdecl operator<<(class klass const &, int) 215 216 ??5@YAAEBVklass@@AEBV0@_K@Z 217 ; CHECK: class klass const & __cdecl operator>>(class klass const &, unsigned __int64) 218 219 ??2@YAPEAX_KAEAVklass@@@Z 220 ; CHECK: void * __cdecl operator new(unsigned __int64, class klass &) 221 222 ??_U@YAPEAX_KAEAVklass@@@Z 223 ; CHECK: void * __cdecl operator new[](unsigned __int64, class klass &) 224 225 ??3@YAXPEAXAEAVklass@@@Z 226 ; CHECK: void __cdecl operator delete(void *, class klass &) 227 228 ??_V@YAXPEAXAEAVklass@@@Z 229 ; CHECK: void __cdecl operator delete[](void *, class klass &) 230 231