1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-20 03:23:01 +02:00
llvm-mirror/test/Demangle/ms-mangle.test
Zachary Turner 4fd5cfc7b8 [MS Demangler] Add ms-arg-qualifiers.test
This converts the arg qualifier mangling tests from
clang/CodeGenCXX/mangle-ms-arg-qualifiers.cpp to demangling tests.
Most tests already pass, so this patch doesn't come with any
functional change, just the addition of new tests.  The few tests
that don't pass are left in with a FIXME label so that they don't
run but serve as documentation about what still doesn't work.

llvm-svn: 338067
2018-07-26 20:25:35 +00:00

392 lines
10 KiB
Plaintext

; These tests are based on clang/test/CodeGenCXX/mangle-ms.cpp
; RUN: llvm-undname < %s | FileCheck %s
; CHECK-NOT: Invalid mangled name
?a@@3HA
; CHECK: int a
?b@N@@3HA
; CHECK: int N::b
?anonymous@?A@N@@3HA
; CHECK: int N::`anonymous namespace'::anonymous
; FIXME: Reference Temporaries
; ?$RT1@NeedsReferenceTemporary@@3ABHB
; ?$RT1@NeedsReferenceTemporary@@3AEBHEB
?_c@@YAHXZ
; CHECK: int __cdecl _c(void)
?d@foo@@0FB
; CHECK: static short const foo::d
?e@foo@@1JC
; CHECK: static long volatile foo::e
?f@foo@@2DD
; CHECK: static char const volatile foo::f
??0foo@@QAE@XZ
; CHECK: __thiscall foo::foo(void)
??0foo@@QEAA@XZ
; CHECK: __cdecl foo::foo(void)
??1foo@@QAE@XZ
; CHECK: __thiscall foo::~foo(void)
??1foo@@QEAA@XZ
; CHECK: __cdecl foo::~foo(void)
??0foo@@QAE@H@Z
; CHECK: __thiscall foo::foo(int)
??0foo@@QEAA@H@Z
; CHECK: __cdecl foo::foo(int)
??0foo@@QAE@PAD@Z
; CHECK: __thiscall foo::foo(char *)
??0foo@@QEAA@PEAD@Z
; CHECK: __cdecl foo::foo(char *)
?bar@@YA?AVfoo@@XZ
; CHECK: class foo __cdecl bar(void)
?bar@@YA?AVfoo@@XZ
; CHECK: class foo __cdecl bar(void)
??Hfoo@@QAEHH@Z
; CHECK: int __thiscall foo::operator+(int)
??Hfoo@@QEAAHH@Z
; CHECK: int __cdecl foo::operator+(int)
?static_method@foo@@SAPAV1@XZ
; CHECK: static class foo * __cdecl foo::static_method(void)
?static_method@foo@@SAPEAV1@XZ
; CHECK: static class foo * __cdecl foo::static_method(void)
?g@bar@@2HA
; CHECK: static int bar::g
; undname returns `int *h1`, but it is a bug in their demangler. Their mangler
; correctly mangles `int *h1` as ?h1@3PAHA and `int * const h1` as ?h1@3QAHA
?h1@@3QAHA
; CHECK: int *const h1
?h2@@3QBHB
; CHECK: int const *const h2
?h3@@3QIAHIA
; CHECK: int *const __restrict h3
?h3@@3QEIAHEIA
; CHECK: int *const __restrict h3
?i@@3PAY0BE@HA
; CHECK: int (*i)[20]
?FunArr@@3PAY0BE@P6AHHH@ZA
; CHECK: int __cdecl (*(*FunArr)[20])(int, int)
?j@@3P6GHCE@ZA
; CHECK: int __stdcall (*j)(signed char, unsigned char)
?funptr@@YAP6AHXZXZ
; CHECK: int __cdecl (* __cdecl funptr(void))(void)
?k@@3PTfoo@@DT1@
; CHECK: char const volatile foo::*k
?k@@3PETfoo@@DET1@
; CHECK: char const volatile foo::*k
?l@@3P8foo@@AEHH@ZQ1@
; CHECK: int __thiscall (foo::*l)(int)
?g_cInt@@3HB
; CHECK: int const g_cInt
?g_vInt@@3HC
; CHECK: int volatile g_vInt
?g_cvInt@@3HD
; CHECK: int const volatile g_cvInt
?beta@@YI_N_J_W@Z
; CHECK: bool __fastcall beta(__int64, wchar_t)
?beta@@YA_N_J_W@Z
; CHECK: bool __cdecl beta(__int64, wchar_t)
?alpha@@YGXMN@Z
; CHECK: void __stdcall alpha(float, double)
?alpha@@YAXMN@Z
; CHECK: void __cdecl alpha(float, double)
?gamma@@YAXVfoo@@Ubar@@Tbaz@@W4quux@@@Z
; CHECK: void __cdecl gamma(class foo, struct bar, union baz, enum quux)
?gamma@@YAXVfoo@@Ubar@@Tbaz@@W4quux@@@Z
; CHECK: void __cdecl gamma(class foo, struct bar, union baz, enum quux)
?delta@@YAXQAHABJ@Z
; CHECK: void __cdecl delta(int *const, long const &)
?delta@@YAXQEAHAEBJ@Z
; CHECK: void __cdecl delta(int *const, long const &)
?epsilon@@YAXQAY19BE@H@Z
; CHECK: void __cdecl epsilon(int (*const)[10][20])
?epsilon@@YAXQEAY19BE@H@Z
; CHECK: void __cdecl epsilon(int (*const)[10][20])
?zeta@@YAXP6AHHH@Z@Z
; CHECK: void __cdecl zeta(int __cdecl (*)(int, int))
?zeta@@YAXP6AHHH@Z@Z
; CHECK: void __cdecl zeta(int __cdecl (*)(int, int))
; FIXME: We don't support blocks yet.
; ?eta@@YAXP_EAHHH@Z@Z
; FIXME: void eta(int (^)(int, int))
; ?theta@@YAXP_EAHHH@Z@Z
; FIXME: void theta(int(int,int)^ block)
??2@YAPAXI@Z
; CHECK: void * __cdecl operator new(unsigned int)
??3@YAXPAX@Z
; CHECK: void __cdecl operator delete(void *)
??_U@YAPAXI@Z
; CHECK: void * __cdecl operator new[](unsigned int)
??_V@YAXPAX@Z
; CHECK: void __cdecl operator delete[](void *)
?color1@@3PANA
; CHECK: double *color1
?color2@@3QBNB
; CHECK: double const *const color2
; FIXME-EXTRACONST: These tests fails because we print an extra const inside the parens.
; ?color3@@3QAY02$$CBNA
; FIXME-EXTRACONST: double const (*color3)[3]
; ?color4@@3QAY02$$CBNA
; FIXME-EXTRACONST: double const (*color4)[3]
?memptr1@@3RESB@@HES1@
; CHECK: int volatile B::*volatile memptr1
?memptr2@@3PESB@@HES1@
; CHECK: int volatile B::*memptr2
?memptr3@@3REQB@@HEQ1@
; CHECK: int B::*volatile memptr3
?funmemptr1@@3RESB@@R6AHXZES1@
; CHECK: int __cdecl (*volatile B::*volatile funmemptr1)(void)
?funmemptr2@@3PESB@@R6AHXZES1@
; CHECK: int __cdecl (*volatile B::*funmemptr2)(void)
?funmemptr3@@3REQB@@P6AHXZEQ1@
; CHECK: int __cdecl (*B::*volatile funmemptr3)(void)
?memptrtofun1@@3R8B@@EAAXXZEQ1@
; CHECK: void __cdecl (B::*volatile memptrtofun1)(void)
?memptrtofun2@@3P8B@@EAAXXZEQ1@
; CHECK: void __cdecl (B::*memptrtofun2)(void)
?memptrtofun3@@3P8B@@EAAXXZEQ1@
; CHECK: void __cdecl (B::*memptrtofun3)(void)
?memptrtofun4@@3R8B@@EAAHXZEQ1@
; CHECK: int __cdecl (B::*volatile memptrtofun4)(void)
?memptrtofun5@@3P8B@@EAA?CHXZEQ1@
; CHECK: int volatile __cdecl (B::*memptrtofun5)(void)
?memptrtofun6@@3P8B@@EAA?BHXZEQ1@
; CHECK: int const __cdecl (B::*memptrtofun6)(void)
?memptrtofun7@@3R8B@@EAAP6AHXZXZEQ1@
; CHECK: int __cdecl (* __cdecl (B::*volatile memptrtofun7)(void))(void)
?memptrtofun8@@3P8B@@EAAR6AHXZXZEQ1@
; CHECK: int __cdecl (*volatile __cdecl (B::*memptrtofun8)(void))(void)
?memptrtofun9@@3P8B@@EAAQ6AHXZXZEQ1@
; CHECK: int __cdecl (*const __cdecl (B::*memptrtofun9)(void))(void)
?fooE@@YA?AW4E@@XZ
; CHECK: enum E __cdecl fooE(void)
?fooE@@YA?AW4E@@XZ
; CHECK: enum E __cdecl fooE(void)
?fooX@@YA?AVX@@XZ
; CHECK: class X __cdecl fooX(void)
?fooX@@YA?AVX@@XZ
; CHECK: class X __cdecl fooX(void)
?s0@PR13182@@3PADA
; CHECK: char *PR13182::s0
?s1@PR13182@@3PADA
; CHECK: char *PR13182::s1
?s2@PR13182@@3QBDB
; CHECK: char const *const PR13182::s2
?s3@PR13182@@3QBDB
; CHECK: char const *const PR13182::s3
?s4@PR13182@@3RCDC
; CHECK: char volatile *volatile PR13182::s4
?s5@PR13182@@3SDDD
; CHECK: char const volatile *const volatile PR13182::s5
; undname adds an extra const in here, but it seems like their bug.
?s6@PR13182@@3PBQBDB
; CHECK: char const *const *PR13182::s6
; FIXME: We don't properly support static locals in functions yet.
; ?local@?1??extern_c_func@@9@4HA
; FIXME: int `extern_c_func'::`2'::local
; ?local@?1??extern_c_func@@9@4HA
; FIXME: int `extern_c_func'::`2'::local
; ?v@?1??f@@YAHXZ@4U<unnamed-type-v>@?1??1@YAHXZ@A
; FIXME: struct `int __cdecl f(void)'::`2'::<unnamed-type-v> `int __cdecl f(void)'::`2'::v
; ?v@?1???$f@H@@YAHXZ@4U<unnamed-type-v>@?1???$f@H@@YAHXZ@A
; FIXME: struct `int __cdecl f<int>(void)'::`2'::<unnamed-type-v> `int __cdecl f<int>(void)'::`2'::v
??2OverloadedNewDelete@@SAPAXI@Z
; CHECK: static void * __cdecl OverloadedNewDelete::operator new(unsigned int)
??_UOverloadedNewDelete@@SAPAXI@Z
; CHECK: static void * __cdecl OverloadedNewDelete::operator new[](unsigned int)
??3OverloadedNewDelete@@SAXPAX@Z
; CHECK: static void __cdecl OverloadedNewDelete::operator delete(void *)
??_VOverloadedNewDelete@@SAXPAX@Z
; CHECK: static void __cdecl OverloadedNewDelete::operator delete[](void *)
??HOverloadedNewDelete@@QAEHH@Z
; CHECK: int __thiscall OverloadedNewDelete::operator+(int)
??2OverloadedNewDelete@@SAPEAX_K@Z
; CHECK: static void * __cdecl OverloadedNewDelete::operator new(unsigned __int64)
??_UOverloadedNewDelete@@SAPEAX_K@Z
; CHECK: static void * __cdecl OverloadedNewDelete::operator new[](unsigned __int64)
??3OverloadedNewDelete@@SAXPEAX@Z
; CHECK: static void __cdecl OverloadedNewDelete::operator delete(void *)
??_VOverloadedNewDelete@@SAXPEAX@Z
; CHECK: static void __cdecl OverloadedNewDelete::operator delete[](void *)
??HOverloadedNewDelete@@QEAAHH@Z
; CHECK: int __cdecl OverloadedNewDelete::operator+(int)
??2TypedefNewDelete@@SAPAXI@Z
; CHECK: static void * __cdecl TypedefNewDelete::operator new(unsigned int)
??_UTypedefNewDelete@@SAPAXI@Z
; CHECK: static void * __cdecl TypedefNewDelete::operator new[](unsigned int)
??3TypedefNewDelete@@SAXPAX@Z
; CHECK: static void __cdecl TypedefNewDelete::operator delete(void *)
??_VTypedefNewDelete@@SAXPAX@Z
; CHECK: static void __cdecl TypedefNewDelete::operator delete[](void *)
?vector_func@@YQXXZ
; CHECK: void __vectorcall vector_func(void)
; FIXME: We don't support extern C funcs currently.
; ??$fn_tmpl@$1?extern_c_func@@YAXXZ@@YAXXZ
; FIXME: void __cdecl fn_tmpl<&void __cdecl extern_c_func(void)>(void)
; ?overloaded_fn@@$$J0YAXXZ
; FIXME-EXTERNC: extern \"C\" void __cdecl overloaded_fn(void)
; ?f@UnnamedType@@YAXQAPAU<unnamed-type-T1>@S@1@@Z
; FIXME: void __cdecl UnnamedType::f(struct UnnamedType::S::<unnamed-type-T1> ** const)
?f@UnnamedType@@YAXUT2@S@1@@Z
; CHECK: void __cdecl UnnamedType::f(struct UnnamedType::S::T2)
?f@UnnamedType@@YAXPAUT4@S@1@@Z
; CHECK: void __cdecl UnnamedType::f(struct UnnamedType::S::T4 *)
?f@UnnamedType@@YAXUT4@S@1@@Z
; CHECK: void __cdecl UnnamedType::f(struct UnnamedType::S::T4)
?f@UnnamedType@@YAXUT5@S@1@@Z
; CHECK: void __cdecl UnnamedType::f(struct UnnamedType::S::T5)
?f@UnnamedType@@YAXUT2@S@1@@Z
; CHECK: void __cdecl UnnamedType::f(struct UnnamedType::S::T2)
?f@UnnamedType@@YAXUT4@S@1@@Z
; CHECK: void __cdecl UnnamedType::f(struct UnnamedType::S::T4)
?f@UnnamedType@@YAXUT5@S@1@@Z
; CHECK: void __cdecl UnnamedType::f(struct UnnamedType::S::T5)
; ?foo@PassObjectSize@@YAHQAHW4__pass_object_size0@__clang@@@Z
; FIXME: int foo(int *const i __attribute__((pass_object_size(0))));
; ?bar@PassObjectSize@@YAHQAHW4__pass_object_size1@__clang@@@Z
; FIXME: int bar(int *const i __attribute__((pass_object_size(1))));
; ?qux@PassObjectSize@@YAHQAHW4__pass_object_size1@__clang@@0W4__pass_object_size0@3@@Z
; FIXME: int qux(int *const i __attribute__((pass_object_size(1))), int *const j __attribute__((pass_object_size(0))));
; ?zot@PassObjectSize@@YAHQAHW4__pass_object_size1@__clang@@01@Z
; FIXME: int zot(int *const i __attribute__((pass_object_size(1))), int *const j __attribute__((pass_object_size(1))));
?f@Atomic@@YAXU?$_Atomic@H@__clang@@@Z
; CHECK: void __cdecl Atomic::f(struct __clang::_Atomic<int>)
?f@Complex@@YAXU?$_Complex@H@__clang@@@Z
; CHECK: void __cdecl Complex::f(struct __clang::_Complex<int>)
?f@Float16@@YAXU_Float16@__clang@@@Z
; CHECK: void __cdecl Float16::f(struct __clang::_Float16)
??0?$L@H@NS@@QEAA@XZ
; CHECK: __cdecl NS::L<int>::L<int>(void)
??0Bar@Foo@@QEAA@XZ
; CHECK: __cdecl Foo::Bar::Bar(void)
??0?$L@V?$H@PAH@PR26029@@@PR26029@@QAE@XZ
; CHECK: __thiscall PR26029::L<class PR26029::H<int *>>::L<class PR26029::H<int *>>(void)