diff options
author | Frederic Riss <friss@apple.com> | 2018-03-16 22:12:22 +0000 |
---|---|---|
committer | Frederic Riss <friss@apple.com> | 2018-03-16 22:12:22 +0000 |
commit | cce4af160cade64cfd0fdda9fdb320a26d145ca8 (patch) | |
tree | 64287d8be3d91eec6b3743171f94b14fa3154ac8 /lldb/packages/Python/lldbsuite | |
parent | f6766b0e4554a2137fb281ed69f6c91e2fe8e839 (diff) | |
download | bcm5719-llvm-cce4af160cade64cfd0fdda9fdb320a26d145ca8.tar.gz bcm5719-llvm-cce4af160cade64cfd0fdda9fdb320a26d145ca8.zip |
[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
Diffstat (limited to 'lldb/packages/Python/lldbsuite')
3 files changed, 31 insertions, 0 deletions
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<int> IntContainer; + +struct Foo { + class Bar; + Bar *bar; +}; |