From cce4af160cade64cfd0fdda9fdb320a26d145ca8 Mon Sep 17 00:00:00 2001 From: Frederic Riss Date: Fri, 16 Mar 2018 22:12:22 +0000 Subject: [DWARFASTParserClang] Complete external record types before using them as a decl context. Summary: When in a gmodules-like debugging scenario, you can have a parent decl context that gets imported from an external AST. When this happens, we must be careful to complete this type before adding children to it, otherwise it sometimes results in a crash. Reviewers: clayborg, jingham Subscribers: aprantl, JDevlieghere, lldb-commits Differential Revision: https://reviews.llvm.org/D43592 llvm-svn: 327750 --- .../lang/cpp/gmodules/TestWithModuleDebugging.py | 23 ++++++++++++++++++++++ .../lldbsuite/test/lang/cpp/gmodules/main.cpp | 3 +++ .../Python/lldbsuite/test/lang/cpp/gmodules/pch.h | 5 +++++ 3 files changed, 31 insertions(+) (limited to 'lldb/packages/Python/lldbsuite/test/lang/cpp') diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/gmodules/TestWithModuleDebugging.py b/lldb/packages/Python/lldbsuite/test/lang/cpp/gmodules/TestWithModuleDebugging.py index b9f25537258..20207c54db9 100644 --- a/lldb/packages/Python/lldbsuite/test/lang/cpp/gmodules/TestWithModuleDebugging.py +++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/gmodules/TestWithModuleDebugging.py @@ -69,3 +69,26 @@ class TestWithGmodulesDebugInfo(TestBase): 42, memberValue.GetValueAsSigned(), "Member value incorrect") + + testValue = frame.EvaluateExpression("bar") + self.assertTrue( + testValue.GetError().Success(), + "Test expression value invalid: %s" % + (testValue.GetError().GetCString())) + self.assertTrue( + testValue.GetTypeName() == "Foo::Bar", + "Test expression type incorrect") + + memberValue = testValue.GetChildMemberWithName("i") + self.assertTrue( + memberValue.GetError().Success(), + "Member value missing or invalid: %s" % + (testValue.GetError().GetCString())) + self.assertTrue( + memberValue.GetTypeName() == "int", + "Member type incorrect") + self.assertEqual( + 123, + memberValue.GetValueAsSigned(), + "Member value incorrect") + diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/gmodules/main.cpp b/lldb/packages/Python/lldbsuite/test/lang/cpp/gmodules/main.cpp index aa401368517..588a3a8e01f 100644 --- a/lldb/packages/Python/lldbsuite/test/lang/cpp/gmodules/main.cpp +++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/gmodules/main.cpp @@ -1,5 +1,8 @@ +class Foo::Bar { int i = 123; }; + int main(int argc, const char * argv[]) { IntContainer test(42); + Foo::Bar bar; return 0; // break here } diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/gmodules/pch.h b/lldb/packages/Python/lldbsuite/test/lang/cpp/gmodules/pch.h index a6c59b94c89..dba4fee9a8c 100644 --- a/lldb/packages/Python/lldbsuite/test/lang/cpp/gmodules/pch.h +++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/gmodules/pch.h @@ -10,3 +10,8 @@ class GenericContainer { }; typedef GenericContainer IntContainer; + +struct Foo { + class Bar; + Bar *bar; +}; -- cgit v1.2.3