llvm-undname: Correctly demangle vararg parameters

FunctionSignatureNode already had an IsVariadic field,
but it wasn't used anywhere yet. Set it and use it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362541 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nico Weber
2019-06-04 19:10:08 +00:00
parent eef66d3ad4
commit ac1cfa0a87
5 changed files with 17 additions and 9 deletions
+4 -5
View File
@@ -1826,7 +1826,7 @@ FunctionSignatureNode *Demangler::demangleFunctionType(StringView &MangledName,
if (!IsStructor)
FTy->ReturnType = demangleType(MangledName, QualifierMangleMode::Result);
FTy->Params = demangleFunctionParameterList(MangledName);
FTy->Params = demangleFunctionParameterList(MangledName, FTy->IsVariadic);
FTy->IsNoexcept = demangleThrowSpecification(MangledName);
@@ -2094,8 +2094,8 @@ ArrayTypeNode *Demangler::demangleArrayType(StringView &MangledName) {
}
// Reads a function's parameters.
NodeArrayNode *
Demangler::demangleFunctionParameterList(StringView &MangledName) {
NodeArrayNode *Demangler::demangleFunctionParameterList(StringView &MangledName,
bool &IsVariadic) {
// Empty parameter list.
if (MangledName.consumeFront('X'))
return nullptr;
@@ -2152,8 +2152,7 @@ Demangler::demangleFunctionParameterList(StringView &MangledName) {
return NA;
if (MangledName.consumeFront('Z')) {
// This is a variadic parameter list. We probably need a variadic node to
// append to the end.
IsVariadic = true;
return NA;
}