| """ | |
| Test that hitting a UBSan issue while running user expression doesn't break the evaluation. | |
| """ | |
| import lldb | |
| from lldbsuite.test.lldbtest import * | |
| from lldbsuite.test.decorators import * | |
| import lldbsuite.test.lldbutil as lldbutil | |
| class UbsanUserExpressionTestCase(TestBase): | |
| @skipUnlessUndefinedBehaviorSanitizer | |
| def test(self): | |
| self.build() | |
| self.ubsan_tests() | |
| def setUp(self): | |
| # Call super's setUp(). | |
| TestBase.setUp(self) | |
| self.line_breakpoint = line_number("main.c", "// breakpoint line") | |
| def ubsan_tests(self): | |
| # Load the test | |
| exe = self.getBuildArtifact("a.out") | |
| target = self.dbg.CreateTarget(exe) | |
| self.assertTrue(target, VALID_TARGET) | |
| self.registerSanitizerLibrariesWithTarget(target) | |
| self.runCmd("breakpoint set -f main.c -l %d" % self.line_breakpoint) | |
| self.runCmd("run") | |
| process = self.dbg.GetSelectedTarget().process | |
| thread = process.GetSelectedThread() | |
| frame = thread.GetSelectedFrame() | |
| self.expect( | |
| "thread list", | |
| STOPPED_DUE_TO_BREAKPOINT, | |
| substrs=["stopped", "stop reason = breakpoint"], | |
| ) | |
| self.expect("expression foo()", substrs=["(int) $0 = 42"]) | |
| self.expect( | |
| "thread list", | |
| STOPPED_DUE_TO_BREAKPOINT, | |
| substrs=["stopped", "stop reason = breakpoint"], | |
| ) |