From c1a0e6fe6b33b9f9b5420edddd3afce7fa1d308b Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Tue, 4 Jun 2019 15:38:00 +0000 Subject: [PATCH] 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 llvm-svn: 362514 --- llvm/lib/Demangle/MicrosoftDemangle.cpp | 11 +++++----- llvm/test/Demangle/invalid-manglings.test | 25 +++++++++++++++++++++++ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp index 83e6f60de033..a28e01c2567a 100644 --- a/llvm/lib/Demangle/MicrosoftDemangle.cpp +++ b/llvm/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/llvm/test/Demangle/invalid-manglings.test b/llvm/test/Demangle/invalid-manglings.test index 8d84034452cf..258a752786e4 100644 --- a/llvm/test/Demangle/invalid-manglings.test +++ b/llvm/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