summaryrefslogtreecommitdiffstats
path: root/llvm/test/Demangle/ms-basic.test
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Demangle/ms-basic.test')
-rw-r--r--llvm/test/Demangle/ms-basic.test230
1 files changed, 230 insertions, 0 deletions
diff --git a/llvm/test/Demangle/ms-basic.test b/llvm/test/Demangle/ms-basic.test
new file mode 100644
index 00000000000..17694b90284
--- /dev/null
+++ b/llvm/test/Demangle/ms-basic.test
@@ -0,0 +1,230 @@
+; 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 &)
+
OpenPOWER on IntegriCloud