summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Demangle/MicrosoftDemangle.cpp12
-rw-r--r--llvm/test/Demangle/ms-basic.test2
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
OpenPOWER on IntegriCloud