1""" 2Test that hitting a UBSan issue while running user expression doesn't break the evaluation. 3""" 4 5import lldb 6from lldbsuite.test.lldbtest import * 7from lldbsuite.test.decorators import * 8import lldbsuite.test.lldbutil as lldbutil 9 10 11class UbsanUserExpressionTestCase(TestBase): 12 13 mydir = TestBase.compute_mydir(__file__) 14 15 @skipUnlessUndefinedBehaviorSanitizer 16 def test(self): 17 self.build() 18 self.ubsan_tests() 19 20 def setUp(self): 21 # Call super's setUp(). 22 TestBase.setUp(self) 23 self.line_breakpoint = line_number('main.c', '// breakpoint line') 24 25 def ubsan_tests(self): 26 # Load the test 27 exe = self.getBuildArtifact("a.out") 28 target = self.dbg.CreateTarget(exe) 29 self.assertTrue(target, VALID_TARGET) 30 self.registerSanitizerLibrariesWithTarget(target) 31 32 self.runCmd("breakpoint set -f main.c -l %d" % self.line_breakpoint) 33 34 self.runCmd("run") 35 36 process = self.dbg.GetSelectedTarget().process 37 thread = process.GetSelectedThread() 38 frame = thread.GetSelectedFrame() 39 40 self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, 41 substrs=['stopped', 'stop reason = breakpoint']) 42 43 self.expect("p foo()", substrs=["(int) $0 = 42"]) 44 45 self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, 46 substrs=['stopped', 'stop reason = breakpoint']) 47