Author: asmith Date: Thu Sep 27 19:33:51 2018 New Revision: 343292 URL: http://llvm.org/viewvc/llvm-project?rev=343292&view=rev Log: [lldb] Remove an assertion in RichManglingContext::GetBufferRef() hit when debugging a native x86 Windows process
Summary: A RichManglingContext constructed with an invalid demangled name or with a demangled function name without any context will have an empty context. This triggers an assertion in RichManglingContext::GetBufferRef() when debugging a native Windows process on x86 when it shouldn't. Remove the assertion. Reviewers: aleksandr.urakov, zturner, lldb-commits Reviewed By: zturner Subscribers: erik.pilkington Differential Revision: https://reviews.llvm.org/D52626 Modified: lldb/trunk/include/lldb/Core/RichManglingContext.h lldb/trunk/unittests/Core/RichManglingContextTest.cpp Modified: lldb/trunk/include/lldb/Core/RichManglingContext.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/RichManglingContext.h?rev=343292&r1=343291&r2=343292&view=diff ============================================================================== --- lldb/trunk/include/lldb/Core/RichManglingContext.h (original) +++ lldb/trunk/include/lldb/Core/RichManglingContext.h Thu Sep 27 19:33:51 2018 @@ -64,7 +64,6 @@ public: /// most recent ParseXy() operation. The next ParseXy() call invalidates it. llvm::StringRef GetBufferRef() const { assert(m_provider != None && "Initialize a provider first"); - assert(m_buffer.data() != nullptr && "Parse first"); return m_buffer; } Modified: lldb/trunk/unittests/Core/RichManglingContextTest.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Core/RichManglingContextTest.cpp?rev=343292&r1=343291&r2=343292&view=diff ============================================================================== --- lldb/trunk/unittests/Core/RichManglingContextTest.cpp (original) +++ lldb/trunk/unittests/Core/RichManglingContextTest.cpp Thu Sep 27 19:33:51 2018 @@ -57,6 +57,29 @@ TEST(RichManglingContextTest, FromCxxMet ItaniumRMC.ParseFullName(); CxxMethodRMC.ParseFullName(); EXPECT_TRUE(ItaniumRMC.GetBufferRef() == CxxMethodRMC.GetBufferRef()); + + // Construct with a random name. + { + RichManglingContext CxxMethodRMC; + EXPECT_TRUE(CxxMethodRMC.FromCxxMethodName(ConstString("X"))); + + // We expect it is not a function. + EXPECT_FALSE(CxxMethodRMC.IsFunction()); + } + + // Construct with a function without a context. + { + RichManglingContext CxxMethodRMC; + EXPECT_TRUE(CxxMethodRMC.FromCxxMethodName( + ConstString("void * operator new(unsigned __int64)"))); + + // We expect it is a function. + EXPECT_TRUE(CxxMethodRMC.IsFunction()); + + // We expect its context is empty. + CxxMethodRMC.ParseFunctionDeclContextName(); + EXPECT_TRUE(CxxMethodRMC.GetBufferRef().empty()); + } } TEST(RichManglingContextTest, SwitchProvider) { _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits