From 1f9ff83b6d2afed2d1e6ee210b80e00d4bf3b6b8 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Sun, 2 Jun 2019 23:26:57 +0000 Subject: [PATCH] llvm-undname; Add more test coverage for demangleFunctionClass() Also add two FC_Far that seem to be missing, by symmetry from the public and protected cases. (But FC_Far isn't really a thing anymore, so this doesn't really have an observable effect.) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362344 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Demangle/MicrosoftDemangle.cpp | 4 ++-- test/Demangle/ms-mangle.test | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/lib/Demangle/MicrosoftDemangle.cpp b/lib/Demangle/MicrosoftDemangle.cpp index ed9052f4057..b93a84ea91d 100644 --- a/lib/Demangle/MicrosoftDemangle.cpp +++ b/lib/Demangle/MicrosoftDemangle.cpp @@ -1587,11 +1587,11 @@ FuncClass Demangler::demangleFunctionClass(StringView &MangledName) { case 'C': return FuncClass(FC_Private | FC_Static); case 'D': - return FuncClass(FC_Private | FC_Static); + return FuncClass(FC_Private | FC_Static | FC_Far); case 'E': return FuncClass(FC_Private | FC_Virtual); case 'F': - return FuncClass(FC_Private | FC_Virtual); + return FuncClass(FC_Private | FC_Virtual | FC_Far); case 'G': return FuncClass(FC_Private | FC_StaticThisAdjust); case 'H': diff --git a/test/Demangle/ms-mangle.test b/test/Demangle/ms-mangle.test index e7badeee642..bbac3ebb997 100644 --- a/test/Demangle/ms-mangle.test +++ b/test/Demangle/ms-mangle.test @@ -401,3 +401,31 @@ ??$emplace_back@ABH@?$vector@HV?$allocator@H@std@@@std@@QAE?A?@@ABH@Z ; CHECK: __thiscall std::vector>::emplace_back(int const &) + + +?pub_foo@S@@QAEXXZ +; CHECK: public: void __thiscall S::pub_foo(void) + +?pub_stat_foo@S@@SAXXZ +; CHECK: public: static void __cdecl S::pub_stat_foo(void) + +?pub_virt_foo@S@@UAEXXZ +; CHECK: public: virtual void __thiscall S::pub_virt_foo(void) + +?prot_foo@S@@IAEXXZ +; CHECK: protected: void __thiscall S::prot_foo(void) + +?prot_stat_foo@S@@KAXXZ +; CHECK: protected: static void __cdecl S::prot_stat_foo(void) + +?prot_virt_foo@S@@MAEXXZ +; CHECK: protected: virtual void __thiscall S::prot_virt_foo(void) + +?priv_foo@S@@AAEXXZ +; CHECK: private: void __thiscall S::priv_foo(void) + +?priv_stat_foo@S@@CAXXZ +; CHECK: private: static void __cdecl S::priv_stat_foo(void) + +?priv_virt_foo@S@@EAEXXZ +; CHECK: private: virtual void __thiscall S::priv_virt_foo(void) -- 2.11.0