; RUN: llvm-undname < %s | FileCheck %s ; CHECK-NOT: Invalid mangled name ??0Base@@QEAA@XZ ; CHECK: __cdecl Base::Base(void) ??1Base@@UEAA@XZ ; CHECK: virtual __cdecl Base::~Base(void) ??2@YAPEAX_K@Z ; CHECK: void * __cdecl operator new(unsigned __int64) ??3@YAXPEAX_K@Z ; CHECK: void __cdecl operator delete(void *, unsigned __int64) ??4Base@@QEAAHH@Z ; CHECK: int __cdecl Base::operator=(int) ??6Base@@QEAAHH@Z ; CHECK: int __cdecl Base::operator<<(int) ??5Base@@QEAAHH@Z ; CHECK: int __cdecl Base::operator>>(int) ??7Base@@QEAAHXZ ; CHECK: int __cdecl Base::operator!(void) ??8Base@@QEAAHH@Z ; CHECK: int __cdecl Base::operator==(int) ??9Base@@QEAAHH@Z ; CHECK: int __cdecl Base::operator!=(int) ??ABase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator[](int) ??BBase@@QEAAHXZ ; CHECK: __cdecl Base::operator int(void) ??CBase@@QEAAHXZ ; CHECK: int __cdecl Base::operator->(void) ??DBase@@QEAAHXZ ; CHECK: int __cdecl Base::operator*(void) ??EBase@@QEAAHXZ ; CHECK: int __cdecl Base::operator++(void) ??EBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator++(int) ??FBase@@QEAAHXZ ; CHECK: int __cdecl Base::operator--(void) ??FBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator--(int) ??GBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator-(int) ??HBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator+(int) ??IBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator&(int) ??JBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator->*(int) ??KBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator/(int) ??LBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator%(int) ??MBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator<(int) ??NBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator<=(int) ??OBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator>(int) ??PBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator>=(int) ??QBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator,(int) ??RBase@@QEAAHXZ ; CHECK: int __cdecl Base::operator()(void) ??SBase@@QEAAHXZ ; CHECK: int __cdecl Base::operator~(void) ??TBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator^(int) ??UBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator|(int) ??VBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator&&(int) ??WBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator||(int) ??XBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator*=(int) ??YBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator+=(int) ??ZBase@@QEAAHH@Z ; CHECK: int __cdecl Base::operator-=(int) ??_0Base@@QEAAHH@Z ; CHECK: int __cdecl Base::operator/=(int) ??_1Base@@QEAAHH@Z ; CHECK: int __cdecl Base::operator%=(int) ??_2Base@@QEAAHH@Z ; CHECK: int __cdecl Base::operator>>=(int) ??_3Base@@QEAAHH@Z ; CHECK: int __cdecl Base::operator<<=(int) ??_4Base@@QEAAHH@Z ; CHECK: int __cdecl Base::operator&=(int) ??_5Base@@QEAAHH@Z ; CHECK: int __cdecl Base::operator|=(int) ??_6Base@@QEAAHH@Z ; CHECK: int __cdecl Base::operator^=(int) ??_7Base@@6B@ ; CHECK: const Base::`vftable' ??_7A@B@@6BC@D@@@ ; CHECK: const B::A::`vftable'{for `D::C'} ??_8Middle2@@7B@ ; CHECK: const Middle2::`vbtable' ??_9Base@@$B7AA ; CHECK: [thunk]: __cdecl Base::`vcall'{8, {flat}} ??_B?1??getS@@YAAAUS@@XZ@51 ; CHECK: `struct S & __cdecl getS(void)'::`2'::`local static guard'{2} ??_C@_02PCEFGMJL@hi?$AA@ ; CHECK: "hi" ??_DDiamond@@QEAAXXZ ; CHECK: void __cdecl Diamond::`vbase dtor'(void) ??_EBase@@UEAAPEAXI@Z ; CHECK: virtual void * __cdecl Base::`vector deleting dtor'(unsigned int) ??_EBase@@G3AEPAXI@Z ; CHECK: [thunk]: private: void * __thiscall Base::`vector deleting dtor'`adjustor{4}'(unsigned int) ??_F?$SomeTemplate@H@@QAEXXZ ; CHECK: void __thiscall SomeTemplate::`default ctor closure'(void) ??_GBase@@UEAAPEAXI@Z ; CHECK: virtual void * __cdecl Base::`scalar deleting dtor'(unsigned int) ??_H@YAXPEAX_K1P6APEAX0@Z@Z ; CHECK: void __cdecl `vector ctor iterator'(void *, unsigned __int64, unsigned __int64, void * (__cdecl *)(void *)) ??_I@YAXPEAX_K1P6AX0@Z@Z ; CHECK: void __cdecl `vector dtor iterator'(void *, unsigned __int64, unsigned __int64, void (__cdecl *)(void *)) ??_JBase@@UEAAPEAXI@Z ; CHECK: virtual void * __cdecl Base::`vector vbase ctor iterator'(unsigned int) ??_KBase@@UEAAPEAXI@Z ; CHECK: virtual void * __cdecl Base::`virtual displacement map'(unsigned int) ??_LBase@@UEAAPEAXI@Z ; CHECK: virtual void * __cdecl Base::`eh vector ctor iterator'(unsigned int) ??_MBase@@UEAAPEAXI@Z ; CHECK: virtual void * __cdecl Base::`eh vector dtor iterator'(unsigned int) ??_NBase@@UEAAPEAXI@Z ; CHECK: virtual void * __cdecl Base::`eh vector vbase ctor iterator'(unsigned int) ??_O?$SomeTemplate@H@@QAEXXZ ; CHECK: void __thiscall SomeTemplate::`copy ctor closure'(void) ??_SBase@@6B@ ; CHECK: const Base::`local vftable' ??_TDerived@@QEAAXXZ ; CHECK: void __cdecl Derived::`local vftable ctor closure'(void) ??_U@YAPEAX_KAEAVklass@@@Z ; CHECK: void * __cdecl operator new[](unsigned __int64, class klass &) ??_V@YAXPEAXAEAVklass@@@Z ; CHECK: void __cdecl operator delete[](void *, class klass &) ??_R0?AUBase@@@8 ; CHECK: struct Base `RTTI Type Descriptor' .?AUBase@@ ; CHECK: struct Base `RTTI Type Descriptor Name' ??_R1A@?0A@EA@Base@@8 ; CHECK: Base::`RTTI Base Class Descriptor at (0, -1, 0, 64)' ??_R2Base@@8 ; CHECK: Base::`RTTI Base Class Array' ??_R3Base@@8 ; CHECK: Base::`RTTI Class Hierarchy Descriptor' ??_R4Base@@6B@ ; CHECK: const Base::`RTTI Complete Object Locator' ; Generated for `int Foo = f(4);` at global scope. ??__EFoo@@YAXXZ ; CHECK: void __cdecl `dynamic initializer for 'Foo''(void) ; Generated for ; class C { static int i; }; ; int C::i = f(5); ??__E?i@C@@0HA@@YAXXZ ; CHECK: void __cdecl `dynamic initializer for `private: static int C::i''(void) ??__FFoo@@YAXXZ ; CHECK: void __cdecl `dynamic atexit destructor for 'Foo''(void) ??__F_decisionToDFA@XPathLexer@@0V?$vector@VDFA@dfa@antlr4@@V?$allocator@VDFA@dfa@antlr4@@@std@@@std@@A@YAXXZ ; CHECK: void __cdecl `dynamic atexit destructor for `private: static class std::vector> XPathLexer::_decisionToDFA''(void) ??__J?1??f@@YAAAUS@@XZ@51 ; CHECK: `struct S & __cdecl f(void)'::`2'::`local static thread guard'{2} ??__K_deg@@YAHO@Z ; CHECK: int __cdecl operator ""_deg(long double)