From 880d21d3cbfd143f11c2bd2f5a5d6b46bfcb1a70 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Tue, 4 Jun 2019 15:13:30 +0000 Subject: llvm-undname: Several behavior-preserving changes to increase coverage - Replace `Error = true` in a few branches that are truly unreachable with DEMANGLE_UNREACHABLE - Remove early return early in startsWithLocalScopePattern() because it's redundant with the next two early returns - Remove unreachable `case '0'` (it's handled in the branch below) - Remove an unused bool return - Add test coverage for several early error returns, mostly in array type parsing llvm-svn: 362506 --- llvm/lib/Demangle/MicrosoftDemangle.cpp | 17 ++++++----------- llvm/lib/Demangle/MicrosoftDemangleNodes.cpp | 9 ++++----- 2 files changed, 10 insertions(+), 16 deletions(-) (limited to 'llvm/lib/Demangle') diff --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp index b93a84ea91d..83e6f60de03 100644 --- a/llvm/lib/Demangle/MicrosoftDemangle.cpp +++ b/llvm/lib/Demangle/MicrosoftDemangle.cpp @@ -58,8 +58,9 @@ static bool isMemberPointer(StringView MangledName, bool &Error) { // what. break; default: - Error = true; - return false; + // isMemberPointer() is called only if isPointerType() returns true, + // and it rejects other prefixes. + DEMANGLE_UNREACHABLE; } // If it starts with a number, then 6 indicates a non-member function @@ -141,8 +142,6 @@ consumeSpecialIntrinsicKind(StringView &MangledName) { static bool startsWithLocalScopePattern(StringView S) { if (!S.consumeFront('?')) return false; - if (S.size() < 2) - return false; size_t End = S.find('?'); if (End == StringView::npos) @@ -2197,7 +2196,7 @@ Demangler::demangleTemplateParameterList(StringView &MangledName) { MangledName = MangledName.dropFront(); // 1 - single inheritance // H - multiple inheritance - // I - virtual inheritance + // I - virtual inheritance // J - unspecified inheritance char InheritanceSpecifier = MangledName.popFront(); SymbolNode *S = nullptr; @@ -2226,8 +2225,7 @@ Demangler::demangleTemplateParameterList(StringView &MangledName) { case '1': break; default: - Error = true; - break; + DEMANGLE_UNREACHABLE; } TPRN->Affinity = PointerAffinity::Pointer; TPRN->Symbol = S; @@ -2254,12 +2252,9 @@ Demangler::demangleTemplateParameterList(StringView &MangledName) { demangleSigned(MangledName); TPRN->ThunkOffsets[TPRN->ThunkOffsetCount++] = demangleSigned(MangledName); - DEMANGLE_FALLTHROUGH; - case '0': break; default: - Error = true; - break; + DEMANGLE_UNREACHABLE; } TPRN->IsMemberPointer = true; diff --git a/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp b/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp index c26151c5b19..c07fde897e0 100644 --- a/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp +++ b/llvm/lib/Demangle/MicrosoftDemangleNodes.cpp @@ -34,21 +34,20 @@ static void outputSpaceIfNecessary(OutputStream &OS) { OS << " "; } -static bool outputSingleQualifier(OutputStream &OS, Qualifiers Q) { +static void outputSingleQualifier(OutputStream &OS, Qualifiers Q) { switch (Q) { case Q_Const: OS << "const"; - return true; + break; case Q_Volatile: OS << "volatile"; - return true; + break; case Q_Restrict: OS << "__restrict"; - return true; + break; default: break; } - return false; } static bool outputQualifierIfPresent(OutputStream &OS, Qualifiers Q, -- cgit v1.2.3