From: Nico Weber Date: Tue, 4 Jun 2019 15:38:00 +0000 (+0000) Subject: llvm-undname: More no-op changes to increase test coverage X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=26bb87bf78cb9ce1fd090d3495fd48373b3ab56c;p=llvm llvm-undname: More no-op changes to increase test coverage - Add test coverage around invalid anon namespaces and for error paths in demanglePrimitiveType() and in demangleFullyQualifiedTypeName() - Use DEMANGLE_UNREACHABLE in two more unreachable places git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362514 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Demangle/MicrosoftDemangle.cpp b/lib/Demangle/MicrosoftDemangle.cpp index 83e6f60de03..a28e01c2567 100644 --- a/lib/Demangle/MicrosoftDemangle.cpp +++ b/lib/Demangle/MicrosoftDemangle.cpp @@ -238,10 +238,10 @@ demanglePointerCVQualifiers(StringView &MangledName) { case 'S': return std::make_pair(Qualifiers(Q_Const | Q_Volatile), PointerAffinity::Pointer); - default: - assert(false && "Ty is not a pointer type!"); } - return std::make_pair(Q_None, PointerAffinity::Pointer); + // This function is only called if isPointerType() returns true, + // and it only returns true for the six cases listed above. + DEMANGLE_UNREACHABLE; } StringView Demangler::copyString(StringView Borrowed) { @@ -1694,7 +1694,7 @@ CallingConv Demangler::demangleCallingConvention(StringView &MangledName) { } StorageClass Demangler::demangleVariableStorageClass(StringView &MangledName) { - assert(std::isdigit(MangledName.front())); + assert(MangledName.front() >= '0' && MangledName.front() <= '4'); switch (MangledName.popFront()) { case '0': @@ -1708,8 +1708,7 @@ StorageClass Demangler::demangleVariableStorageClass(StringView &MangledName) { case '4': return StorageClass::FunctionLocalStatic; } - Error = true; - return StorageClass::None; + DEMANGLE_UNREACHABLE; } std::pair diff --git a/test/Demangle/invalid-manglings.test b/test/Demangle/invalid-manglings.test index 8d84034452c..258a752786e 100644 --- a/test/Demangle/invalid-manglings.test +++ b/test/Demangle/invalid-manglings.test @@ -249,3 +249,28 @@ ; CHECK-EMPTY: ; CHECK-NEXT: ?x@@3PEAY02$$CRHEA ; CHECK-NEXT: error: Invalid mangled name + +?foo@@3_ +; CHECK-EMPTY: +; CHECK-NEXT: ?foo@@3_ +; CHECK-NEXT: error: Invalid mangled name + +?foo@@3_XA +; CHECK-EMPTY: +; CHECK-NEXT: ?foo@@3_XA +; CHECK-NEXT: error: Invalid mangled name + +?foo@@3Vbar +; CHECK-EMPTY: +; CHECK-NEXT: ?foo@@3Vbar +; CHECK-NEXT: error: Invalid mangled name + +?foo@@3Vbar@ +; CHECK-EMPTY: +; CHECK-NEXT: ?foo@@3Vbar@ +; CHECK-NEXT: error: Invalid mangled name + +?foo@?A +; CHECK-EMPTY: +; CHECK-NEXT: ?foo@?A +; CHECK-NEXT: error: Invalid mangled name