Files
llvm/test/Demangle/ms-basic.test
T
Zachary Turner d4bb30eca1 [MS Demangler] Demangle pointers to member functions.
After this patch, we can now properly demangle pointers to member
functions.  The calling convention is located in the wrong place,
but this will be fixed in a followup since it also affects non
member function pointers.

Differential Revision: https://reviews.llvm.org/D49639

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@338065 91177308-0d34-0410-b5e6-96231b3b80d8
2018-07-26 20:20:10 +00:00

231 lines
4.7 KiB
Plaintext

; RUN: llvm-undname < %s | FileCheck %s
; CHECK-NOT: Invalid mangled name
?x@@3HA
; CHECK: int x
?x@@3PEAHEA
; CHECK: int *x
?x@@3PEAPEAHEA
; CHECK: int **x
?x@@3PEAY02HEA
; CHECK: int (*x)[3]
?x@@3PEAY124HEA
; CHECK: int (*x)[3][5]
?x@@3PEAY02$$CBHEA
; CHECK: int const (*x)[3]
?x@@3PEAEEA
; CHECK: unsigned char *x
?x@@3PEAY1NKM@5HEA
; CHECK: int (*x)[3500][6]
?x@@YAXMH@Z
; CHECK: void __cdecl x(float, int)
?x@@3P6AHMNH@ZEA
; CHECK: int __cdecl (*x)(float, double, int)
?x@@3P6AHP6AHM@ZN@ZEA
; CHECK: int __cdecl (*x)(int __cdecl (*)(float), double)
?x@@3P6AHP6AHM@Z0@ZEA
; CHECK: int __cdecl (*x)(int __cdecl (*)(float), int __cdecl (*)(float))
?x@ns@@3HA
; CHECK: int ns::x
; Microsoft's undname doesn't handle Q correctly or the multiple occurrences
; of the const modifier. So the results here differ, but ours are correct.
?x@@3PEAHEA
; CHECK: int *x
?x@@3PEBHEB
; CHECK: int const *x
?x@@3QEAHEA
; CHECK: int *const x
?x@@3QEBHEB
; CHECK: int const *const x
?x@@3AEBHEB
; CHECK: int const &x
?x@@3PEAUty@@EA
; CHECK: struct ty *x
?x@@3PEATty@@EA
; CHECK: union ty *x
?x@@3PEAUty@@EA
; CHECK: struct ty *x
?x@@3PEAW4ty@@EA
; CHECK: enum ty *x
?x@@3PEAVty@@EA
; CHECK: class ty *x
?x@@3PEAV?$tmpl@H@@EA
; CHECK: class tmpl<int> *x
?x@@3PEAU?$tmpl@H@@EA
; CHECK: struct tmpl<int> *x
?x@@3PEAT?$tmpl@H@@EA
; CHECK: union tmpl<int> *x
?instance@@3Vklass@@A
; CHECK: class klass instance
?instance$initializer$@@3P6AXXZEA
; CHECK: void __cdecl (*instance$initializer$)(void)
??0klass@@QEAA@XZ
; CHECK: __cdecl klass::klass(void)
??1klass@@QEAA@XZ
; CHECK: __cdecl klass::~klass(void)
?x@@YAHPEAVklass@@AEAV1@@Z
; CHECK: int __cdecl x(class klass *, class klass &)
?x@ns@@3PEAV?$klass@HH@1@EA
; CHECK: class ns::klass<int, int> *ns::x
?fn@?$klass@H@ns@@QEBAIXZ
; CHECK: unsigned int __cdecl ns::klass<int>::fn(void) const
??4klass@@QEAAAEBV0@AEBV0@@Z
; CHECK: class klass const & __cdecl klass::operator=(class klass const &)
??7klass@@QEAA_NXZ
; CHECK: bool __cdecl klass::operator!(void)
??8klass@@QEAA_NAEBV0@@Z
; CHECK: bool __cdecl klass::operator==(class klass const &)
??9klass@@QEAA_NAEBV0@@Z
; CHECK: bool __cdecl klass::operator!=(class klass const &)
??Aklass@@QEAAH_K@Z
; CHECK: int __cdecl klass::operator[](unsigned __int64)
??Cklass@@QEAAHXZ
; CHECK: int __cdecl klass::operator->(void)
??Dklass@@QEAAHXZ
; CHECK: int __cdecl klass::operator*(void)
??Eklass@@QEAAHXZ
; CHECK: int __cdecl klass::operator++(void)
??Eklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator++(int)
??Fklass@@QEAAHXZ
; CHECK: int __cdecl klass::operator--(void)
??Fklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator--(int)
??Hklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator+(int)
??Gklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator-(int)
??Iklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator&(int)
??Jklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator->*(int)
??Kklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator/(int)
??Mklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator<(int)
??Nklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator<=(int)
??Oklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator>(int)
??Pklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator>=(int)
??Qklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator,(int)
??Rklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator()(int)
??Sklass@@QEAAHXZ
; CHECK: int __cdecl klass::operator~(void)
??Tklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator^(int)
??Uklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator|(int)
??Vklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator&&(int)
??Wklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator||(int)
??Xklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator*=(int)
??Yklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator+=(int)
??Zklass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator-=(int)
??_0klass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator/=(int)
??_1klass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator%=(int)
??_2klass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator>>=(int)
??_3klass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator<<=(int)
??_6klass@@QEAAHH@Z
; CHECK: int __cdecl klass::operator^=(int)
??6@YAAEBVklass@@AEBV0@H@Z
; CHECK: class klass const & __cdecl operator<<(class klass const &, int)
??5@YAAEBVklass@@AEBV0@_K@Z
; CHECK: class klass const & __cdecl operator>>(class klass const &, unsigned __int64)
??2@YAPEAX_KAEAVklass@@@Z
; CHECK: void * __cdecl operator new(unsigned __int64, class klass &)
??_U@YAPEAX_KAEAVklass@@@Z
; CHECK: void * __cdecl operator new[](unsigned __int64, class klass &)
??3@YAXPEAXAEAVklass@@@Z
; CHECK: void __cdecl operator delete(void *, class klass &)
??_V@YAXPEAXAEAVklass@@@Z
; CHECK: void __cdecl operator delete[](void *, class klass &)