diff options
-rw-r--r-- | llvm/lib/Demangle/MicrosoftDemangle.cpp | 12 | ||||
-rw-r--r-- | llvm/test/Demangle/ms-basic.test | 2 |
2 files changed, 9 insertions, 5 deletions
diff --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp index e7872b3bebc..8b253bf67bc 100644 --- a/llvm/lib/Demangle/MicrosoftDemangle.cpp +++ b/llvm/lib/Demangle/MicrosoftDemangle.cpp @@ -2165,11 +2165,13 @@ Name *Demangler::demangleAnonymousNamespaceName(StringView &MangledName) { Name *Node = Arena.alloc<Name>(); Node->Str = "`anonymous namespace'"; - if (MangledName.consumeFront('@')) - return Node; - - Error = true; - return nullptr; + size_t EndPos = MangledName.find('@'); + if (EndPos == StringView::npos) { + Error = true; + return nullptr; + } + MangledName = MangledName.substr(EndPos + 1); + return Node; } Name *Demangler::demangleLocallyScopedNamePiece(StringView &MangledName) { diff --git a/llvm/test/Demangle/ms-basic.test b/llvm/test/Demangle/ms-basic.test index 972a8b7749a..285334fb4f1 100644 --- a/llvm/test/Demangle/ms-basic.test +++ b/llvm/test/Demangle/ms-basic.test @@ -228,3 +228,5 @@ ??_V@YAXPEAXAEAVklass@@@Z ; CHECK: void __cdecl operator delete[](void *, class klass &) +; ?A@?A0x43583946@@3VB@@B +class B const `anonymous namespace'::A
\ No newline at end of file |