If a template parameter refers to a pointer to member, but the mangling
of that was a string literal instead of a real symbol, llvm-undname used
to crash instead of rejecting the input.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@361402
91177308-0d34-0410-b5e6-
96231b3b80d8
SymbolNode *S = nullptr;
if (MangledName.startsWith('?')) {
S = parse(MangledName);
- if (Error)
+ if (Error || !S->Name) {
+ Error = true;
return nullptr;
+ }
memorizeIdentifier(S->Name->getUnqualifiedIdentifier());
}
; CHECK-EMPTY:
; CHECK-NEXT: ??_C@_12@?z
; CHECK-NEXT: error: Invalid mangled name
+
+??$foo@$1??_C@_02PCEFGMJL@hi?$AA@@
+; CHECK-EMPTY:
+; CHECK-NEXT: ??$foo@$1??_C@_02PCEFGMJL@hi?$AA@@
+; CHECK-NEXT: error: Invalid mangled name