1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00
llvm-mirror/test/Demangle/ms-basic.test
Zachary Turner b7710f8516 [MS Demangler] Re-write the Microsoft demangler.
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
2018-08-27 03:48:03 +00:00

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