| """ |
| Test that LLDB correctly handles fields |
| marked with [[no_unique_address]]. |
| """ |
| |
| import lldb |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| from lldbsuite.test import lldbutil |
| |
| |
| class NoUniqueAddressTestCase(TestBase): |
| def test(self): |
| self.build() |
| lldbutil.run_to_source_breakpoint( |
| self, "return 0", lldb.SBFileSpec("main.cpp", False) |
| ) |
| |
| # Qualified/unqualified lookup to templates in namespace |
| self.expect_expr( |
| "b1", |
| result_type="basic::Foo", |
| result_children=[ValueCheck(name="a", type="Empty")], |
| ) |
| |
| self.expect_expr( |
| "b2", |
| result_type="bases::Foo", |
| result_children=[ |
| ValueCheck( |
| type="bases::B", children=[ValueCheck(name="x", type="Empty")] |
| ), |
| ValueCheck( |
| type="bases::A", |
| children=[ |
| ValueCheck(name="c", type="long", value="1"), |
| ValueCheck(name="d", type="long", value="2"), |
| ], |
| ), |
| ValueCheck( |
| type="bases::C", children=[ValueCheck(name="x", type="Empty")] |
| ), |
| ], |
| ) |
| self.expect_expr( |
| "b3", |
| result_type="bases::Bar", |
| result_children=[ |
| ValueCheck( |
| type="bases::B", children=[ValueCheck(name="x", type="Empty")] |
| ), |
| ValueCheck( |
| type="bases::C", children=[ValueCheck(name="x", type="Empty")] |
| ), |
| ValueCheck( |
| type="bases::A", |
| children=[ |
| ValueCheck(name="c", type="long", value="5"), |
| ValueCheck(name="d", type="long", value="6"), |
| ], |
| ), |
| ], |
| ) |
| |
| self.expect("frame var b1") |
| self.expect("frame var b2") |
| self.expect("frame var b3") |