| import lldb |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| from lldbsuite.test import lldbutil |
| |
| |
| class TestCase(TestBase): |
| def test(self): |
| self.build() |
| (_, process, _, _) = lldbutil.run_to_source_breakpoint( |
| self, "Break: const_method begin", lldb.SBFileSpec("main.cpp") |
| ) |
| |
| self.expect_expr("bar()", result_value="2", result_type="int") |
| self.expect( |
| "expression m_const_mem = 2.0", |
| error=True, |
| substrs=[ |
| "cannot assign to non-static data member", |
| "with const-qualified type", |
| ], |
| ) |
| self.expect( |
| "expression m_mem = 2.0", |
| error=True, |
| substrs=[ |
| "cannot assign to non-static data member within const member function" |
| ], |
| ) |
| self.expect_expr("((Foo*)this)->bar()", result_type="double", result_value="5") |
| |
| lldbutil.continue_to_source_breakpoint( |
| self, |
| process, |
| "Break: const_method no-this lambda", |
| lldb.SBFileSpec("main.cpp"), |
| ) |
| |
| self.expect( |
| "expression x = 7.0", |
| error=True, |
| substrs=[ |
| "cannot assign to non-static data member within const member function" |
| ], |
| ) |
| |
| lldbutil.continue_to_source_breakpoint( |
| self, |
| process, |
| "Break: const_method mutable no-this lambda", |
| lldb.SBFileSpec("main.cpp"), |
| ) |
| |
| self.expect_expr("x = 7.0; x", result_value="7") |
| |
| lldbutil.continue_to_source_breakpoint( |
| self, process, "Break: const_method lambda", lldb.SBFileSpec("main.cpp") |
| ) |
| |
| # FIXME: mutating this capture should be disallowed in a non-mutable lambda. |
| self.expect_expr("y = 8.0") |
| self.expect_expr("bar()", result_value="2", result_type="int") |
| self.expect( |
| "expression m_const_mem = 2.0", |
| error=True, |
| substrs=[ |
| "cannot assign to non-static data member", |
| "with const-qualified type", |
| ], |
| ) |
| self.expect( |
| "expression m_mem = 2.0", |
| error=True, |
| substrs=[ |
| "cannot assign to non-static data member within const member function" |
| ], |
| ) |
| self.expect_expr("m_mem", result_value="-2") |
| self.expect_expr("((Foo*)this)->bar()", result_type="double", result_value="5") |
| |
| lldbutil.continue_to_source_breakpoint( |
| self, |
| process, |
| "Break: const_method mutable lambda", |
| lldb.SBFileSpec("main.cpp"), |
| ) |
| |
| self.expect_expr("y = 9.0") |
| self.expect_expr("bar()", result_value="2", result_type="int") |
| self.expect( |
| "expression m_const_mem = 2.0", |
| error=True, |
| substrs=[ |
| "cannot assign to non-static data member", |
| "with const-qualified type", |
| ], |
| ) |
| self.expect( |
| "expression m_mem = 2.0", |
| error=True, |
| substrs=[ |
| "cannot assign to non-static data member within const member function" |
| ], |
| ) |
| self.expect_expr("m_mem", result_value="-2") |