mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
b7710f8516
This is a pretty large refactor / re-write of the Microsoft demangler. The previous one was a little hackish because it evolved as I was learning about all the various edge cases, exceptions, etc. It didn't have a proper AST and so there was lots of custom handling of things that should have been much more clean. Taking what was learned from that experience, it's now re-written with a completely redesigned and much more sensible AST. It's probably still not perfect, but at least it's comprehensible now to someone else who wants to come along and make some modifications or read the code. Incidentally, this fixed a couple of bugs, so I've enabled the tests which now pass. llvm-svn: 340710
229 lines
4.7 KiB
Plaintext
229 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@@3PEAVty@@EA
|
|
; CHECK: class ty *x
|
|
|
|
?x@@3PEAW4ty@@EA
|
|
; CHECK: enum 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 &)
|
|
|
|
; ?A@?A0x43583946@@3VB@@B
|
|
class B const `anonymous namespace'::A |