|  | ; 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<int>::`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<int>::`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' | 
|  |  | 
|  | ??_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' | 
|  |  | 
|  | ??__EFoo@@YAXXZ | 
|  | ; CHECK: void __cdecl `dynamic initializer for 'Foo''(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<class antlr4::dfa::DFA, class std::allocator<class antlr4::dfa::DFA>> XPathLexer::_decisionToDFA''(void) | 
|  |  | 
|  | ??__K_deg@@YAHO@Z | 
|  | ; CHECK: int __cdecl operator ""_deg(long double) | 
|  |  |