diff options
Diffstat (limited to 'lldb/packages/Python/lldbsuite')
3 files changed, 44 insertions, 1 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/commands/expression/codegen-crash-typedefdecl-not-in_declcontext/TestCodegenCrashTypedefDeclNotInDeclContext.py b/lldb/packages/Python/lldbsuite/test/commands/expression/codegen-crash-typedefdecl-not-in_declcontext/TestCodegenCrashTypedefDeclNotInDeclContext.py new file mode 100644 index 00000000000..f08c0dcbda9 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/commands/expression/codegen-crash-typedefdecl-not-in_declcontext/TestCodegenCrashTypedefDeclNotInDeclContext.py @@ -0,0 +1,4 @@ +from lldbsuite.test import lldbinline +from lldbsuite.test import decorators + +lldbinline.MakeInlineTest(__file__, globals(), []) diff --git a/lldb/packages/Python/lldbsuite/test/commands/expression/codegen-crash-typedefdecl-not-in_declcontext/main.cpp b/lldb/packages/Python/lldbsuite/test/commands/expression/codegen-crash-typedefdecl-not-in_declcontext/main.cpp new file mode 100644 index 00000000000..e4f6600eab2 --- /dev/null +++ b/lldb/packages/Python/lldbsuite/test/commands/expression/codegen-crash-typedefdecl-not-in_declcontext/main.cpp @@ -0,0 +1,39 @@ +// This is a reproducer for a crash in codegen. It happens when we have a +// RecordDecl used in an expression and one of the FieldDecl are not complete. +// This case happens when: +// - A RecordDecl (E) has a FieldDecl which is a reference member variable +// - The underlying type of the FieldDec is a TypedefDecl +// - The typedef refers to a ClassTemplateSpecialization (DWrapper) +// - The typedef is not present in the DeclContext of B +// - The typedef shows up as a return value of a member function of E (f()) +template <typename T> struct DWrapper {}; + +struct D {}; + +namespace NS { +typedef DWrapper<D> DW; +} + +struct B { + NS::DW spd; + int a = 0; +}; + +struct E { + E(B &b) : b_ref(b) {} + NS::DW f() { return {}; }; + void g() { + return; //%self.expect("p b_ref", substrs=['(B) $0 =', '(spd = NS::DW', 'a = 0)']) + } + + B &b_ref; +}; + +int main() { + B b; + E e(b); + + e.g(); + + return 0; +} diff --git a/lldb/packages/Python/lldbsuite/test/commands/expression/completion-crash-incomplete-record/TestCompletionCrashIncompleteRecord.py b/lldb/packages/Python/lldbsuite/test/commands/expression/completion-crash-incomplete-record/TestCompletionCrashIncompleteRecord.py index 68bd864c008..f08c0dcbda9 100644 --- a/lldb/packages/Python/lldbsuite/test/commands/expression/completion-crash-incomplete-record/TestCompletionCrashIncompleteRecord.py +++ b/lldb/packages/Python/lldbsuite/test/commands/expression/completion-crash-incomplete-record/TestCompletionCrashIncompleteRecord.py @@ -1,4 +1,4 @@ from lldbsuite.test import lldbinline from lldbsuite.test import decorators -lldbinline.MakeInlineTest(__file__, globals(), [decorators.skipIf(bugnumber="rdar://53756116")]) +lldbinline.MakeInlineTest(__file__, globals(), []) |