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