| import lldb |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| from lldbsuite.test import lldbutil |
| |
| |
| class OdrHandlingWithDylibTestCase(TestBase): |
| @skipIf( |
| bugnumber="https://github.com/llvm/llvm-project/issues/50375, rdar://135551810" |
| ) |
| def test(self): |
| """ |
| Tests that the expression evaluator is able to deal with types |
| whose definitions conflict across multiple LLDB modules (in this |
| case the definition for 'class Service' in the main executable |
| has an additional field compared to the definition found in the |
| dylib). This causes the ASTImporter to detect a name conflict |
| while importing 'Service'. With LLDB's liberal ODRHandlingType |
| the ASTImporter happily creates a conflicting AST node for |
| 'Service' in the scratch ASTContext, leading to a crash down |
| the line. |
| """ |
| self.build() |
| |
| lldbutil.run_to_source_breakpoint( |
| self, "plugin_entry", lldb.SBFileSpec("plugin.cpp") |
| ) |
| |
| self.expect_expr("*gProxyThis") |