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 def test_ir_interpreter(self): 48 self.build_and_run() 49 50 options = lldb.SBExpressionOptions() 51 options.SetLanguage(lldb.eLanguageTypeC_plus_plus) 52 53 set_up_expressions = ["int $i = 9", "int $j = 3", "int $k = 5", 54 "unsigned long long $ull = -1", "unsigned $u = -1"] 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 "($ull & -1) == $u"] 66 67 for expression in set_up_expressions: 68 self.frame().EvaluateExpression(expression, options) 69 70 for expression in expressions: 71 interp_expression = expression 72 jit_expression = "(int)getpid(); " + expression 73 74 interp_result = self.frame().EvaluateExpression( 75 interp_expression, options).GetValueAsSigned() 76 jit_result = self.frame().EvaluateExpression( 77 jit_expression, options).GetValueAsSigned() 78 79 self.assertEqual( 80 interp_result, 81 jit_result, 82 "While evaluating " + 83 expression) 84 85 def test_type_conversions(self): 86 target = self.dbg.GetDummyTarget() 87 short_val = target.EvaluateExpression("(short)-1") 88 self.assertEqual(short_val.GetValueAsSigned(), -1) 89 long_val = target.EvaluateExpression("(long) "+ short_val.GetName()) 90 self.assertEqual(long_val.GetValueAsSigned(), -1) 91