1""" 2Test the IR interpreter 3""" 4 5 6import unittest2 7 8import lldb 9from lldbsuite.test.decorators import * 10from lldbsuite.test.lldbtest import * 11from lldbsuite.test import lldbutil 12 13 14class IRInterpreterTestCase(TestBase): 15 16 mydir = TestBase.compute_mydir(__file__) 17 NO_DEBUG_INFO_TESTCASE = True 18 19 def setUp(self): 20 # Call super's setUp(). 21 TestBase.setUp(self) 22 # Find the line number to break for main.c. 23 self.line = line_number('main.c', 24 '// Set breakpoint here') 25 26 # Disable confirmation prompt to avoid infinite wait 27 self.runCmd("settings set auto-confirm true") 28 self.addTearDownHook( 29 lambda: self.runCmd("settings clear auto-confirm")) 30 31 def build_and_run(self): 32 """Test the IR interpreter""" 33 self.build() 34 35 self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET) 36 37 lldbutil.run_break_set_by_file_and_line( 38 self, "main.c", self.line, num_expected_locations=1, loc_exact=False) 39 40 self.runCmd("run", RUN_SUCCEEDED) 41 42 @add_test_categories(['pyapi']) 43 # getpid() is POSIX, among other problems, see bug 44 @expectedFailureAll( 45 oslist=['windows'], 46 bugnumber="http://llvm.org/pr21765") 47 @expectedFailureNetBSD 48 def test_ir_interpreter(self): 49 self.build_and_run() 50 51 options = lldb.SBExpressionOptions() 52 options.SetLanguage(lldb.eLanguageTypeC_plus_plus) 53 54 set_up_expressions = ["int $i = 9", "int $j = 3", "int $k = 5"] 55 56 expressions = ["$i + $j", 57 "$i - $j", 58 "$i * $j", 59 "$i / $j", 60 "$i % $k", 61 "$i << $j", 62 "$i & $j", 63 "$i | $j", 64 "$i ^ $j"] 65 66 for expression in set_up_expressions: 67 self.frame().EvaluateExpression(expression, options) 68 69 for expression in expressions: 70 interp_expression = expression 71 jit_expression = "(int)getpid(); " + expression 72 73 interp_result = self.frame().EvaluateExpression( 74 interp_expression, options).GetValueAsSigned() 75 jit_result = self.frame().EvaluateExpression( 76 jit_expression, options).GetValueAsSigned() 77 78 self.assertEqual( 79 interp_result, 80 jit_result, 81 "While evaluating " + 82 expression) 83 84 def test_type_conversions(self): 85 target = self.dbg.GetDummyTarget() 86 short_val = target.EvaluateExpression("(short)-1") 87 self.assertEqual(short_val.GetValueAsSigned(), -1) 88 long_val = target.EvaluateExpression("(long) "+ short_val.GetName()) 89 self.assertEqual(long_val.GetValueAsSigned(), -1) 90