diff --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp --- a/llvm/lib/Demangle/MicrosoftDemangle.cpp +++ b/llvm/lib/Demangle/MicrosoftDemangle.cpp @@ -2404,7 +2404,8 @@ std::string_view Name{MangledName}; SymbolNode *AST = D.parse(Name); if (!D.Error && NMangled) - *NMangled = Name.empty() ? 0 : &*Name.begin() - &*MangledName.begin(); + *NMangled = Name.empty() ? MangledName.size() + : &*Name.begin() - &*MangledName.begin(); if (Flags & MSDF_DumpBackrefs) D.dumpBackReferences(); diff --git a/llvm/test/Demangle/warn-trailing.test b/llvm/test/Demangle/warn-trailing.test --- a/llvm/test/Demangle/warn-trailing.test +++ b/llvm/test/Demangle/warn-trailing.test @@ -4,3 +4,8 @@ ; CHECK: ?x@@3HAasdf ; CHECK-NEXT: int x ; CHECK-NEXT: warning: trailing characters: asdf + +.?AVNet@@ +; CHECK: .?AVNet@@ +; CHECK-NEXT: class Net `RTTI Type Descriptor Name' +; CHECK-NOT: warning: trailing characters