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 @skipUnlessUndefinedBehaviorSanitizer 13 def test(self): 14 self.build() 15 self.ubsan_tests() 16 17 def setUp(self): 18 # Call super's setUp(). 19 TestBase.setUp(self) 20 self.line_breakpoint = line_number("main.c", "// breakpoint line") 21 22 def ubsan_tests(self): 23 # Load the test 24 exe = self.getBuildArtifact("a.out") 25 target = self.dbg.CreateTarget(exe) 26 self.assertTrue(target, VALID_TARGET) 27 self.registerSanitizerLibrariesWithTarget(target) 28 29 self.runCmd("breakpoint set -f main.c -l %d" % self.line_breakpoint) 30 31 self.runCmd("run") 32 33 process = self.dbg.GetSelectedTarget().process 34 thread = process.GetSelectedThread() 35 frame = thread.GetSelectedFrame() 36 37 self.expect( 38 "thread list", 39 STOPPED_DUE_TO_BREAKPOINT, 40 substrs=["stopped", "stop reason = breakpoint"], 41 ) 42 43 self.expect("expression foo()", substrs=["(int) $0 = 42"]) 44 45 self.expect( 46 "thread list", 47 STOPPED_DUE_TO_BREAKPOINT, 48 substrs=["stopped", "stop reason = breakpoint"], 49 ) 50