[MS Demangler] Properly demangle anonymous namespaces.
authorZachary Turner <zturner@google.com>
Mon, 20 Aug 2018 23:58:35 +0000 (23:58 +0000)
committerZachary Turner <zturner@google.com>
Mon, 20 Aug 2018 23:58:35 +0000 (23:58 +0000)
llvm-svn: 340237

llvm/lib/Demangle/MicrosoftDemangle.cpp
llvm/test/Demangle/ms-basic.test

index e7872b3..8b253bf 100644 (file)
@@ -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) {
index 972a8b7..285334f 100644 (file)
 ??_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