TestConstVariables.py revision 3e947331353b5fcadc7416beb48b9ccf0f558a47
1c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan"""Check that compiler-generated constant values work correctly"""
2c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
3c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callananimport os, time
4c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callananimport unittest2
5c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callananimport lldb
6c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callananfrom lldbtest import *
7c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callananimport lldbutil
8c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
9c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callananclass ConstVariableTestCase(TestBase):
10c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
11c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    mydir = os.path.join("lang", "c", "const_variables")
12c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
13c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    @dsym_test
14c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    def test_with_dsym_and_run_command(self):
15c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        """Test interpreted and JITted expressions on constant values."""
16c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.buildDsym()
17c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.const_variable()
18c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
19c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    @dwarf_test
20c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    def test_with_dwarf_and_run_command(self):
21c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        """Test interpreted and JITted expressions on constant values."""
22c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.buildDwarf()
23c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.const_variable()
24c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
25c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    def setUp(self):
26c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        # Call super's setUp().
27c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        TestBase.setUp(self)
28c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
29c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    def const_variable(self):
30c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        """Test interpreted and JITted expressions on constant values."""
31c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        exe = os.path.join(os.getcwd(), "a.out")
32c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
33c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
34c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        # Break inside the main.
35c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        lldbutil.run_break_set_by_symbol (self, "main", num_expected_locations=1)
36c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
37c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.runCmd("run", RUN_SUCCEEDED)
38c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
39c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        # The stop reason of the thread should be breakpoint.
40c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
41c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan            substrs = ['stopped',
42c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan                       'stop reason = breakpoint'])
43c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
44c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        # The breakpoint should have a hit count of 1.
45c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.expect("breakpoint list -f", BREAKPOINT_HIT_ONCE,
46c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan            substrs = [' resolved, hit count = 1'])
47c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
483e947331353b5fcadc7416beb48b9ccf0f558a47Daniel Malea        self.runCmd("next")
493e947331353b5fcadc7416beb48b9ccf0f558a47Daniel Malea
50c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        # Try frame variable.
51c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.expect("frame variable index", VARIABLES_DISPLAYED_CORRECTLY,
52c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan            substrs = ['(int32_t) index = 512'])
53c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
54c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        # Try an interpreted expression.
55c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.expect("expr (index + 512)", VARIABLES_DISPLAYED_CORRECTLY,
56c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan            substrs = ['(int) $0 = 1024'])
57c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
58c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        # Try a JITted expression.
59c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.expect("expr (int)getpid(); (index - 256)", VARIABLES_DISPLAYED_CORRECTLY,
60c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan            substrs = ['(int) $1 = 256'])
61c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
62c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.runCmd("kill")
63c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
64c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callananif __name__ == '__main__':
65c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    import atexit
66c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    lldb.SBDebugger.Initialize()
67c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    atexit.register(lambda: lldb.SBDebugger.Terminate())
68c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    unittest2.main()
69