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
14be32d6d505baef5ea38789663c525e679ea0f82bGreg Clayton    @unittest2.expectedFailure(13314878)
15c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    def test_with_dsym_and_run_command(self):
16c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        """Test interpreted and JITted expressions on constant values."""
17c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.buildDsym()
18c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.const_variable()
19c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
2003e33528b9d0218542fc3ec994fdc22808c3809fMatt Kopec    @skipIfLinux # This test works with gcc, but fails with newer version of clang on Linux due to a clang issue. Fails for icc as well. Bug number TDB.
21c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    @dwarf_test
22be32d6d505baef5ea38789663c525e679ea0f82bGreg Clayton    @unittest2.expectedFailure(13314878)
23c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    def test_with_dwarf_and_run_command(self):
24c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        """Test interpreted and JITted expressions on constant values."""
25c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.buildDwarf()
26c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.const_variable()
27c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
28c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    def setUp(self):
29c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        # Call super's setUp().
30c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        TestBase.setUp(self)
31c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
32c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    def const_variable(self):
33c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        """Test interpreted and JITted expressions on constant values."""
34c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        exe = os.path.join(os.getcwd(), "a.out")
35c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
36c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
37c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        # Break inside the main.
38c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        lldbutil.run_break_set_by_symbol (self, "main", num_expected_locations=1)
39c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
40c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.runCmd("run", RUN_SUCCEEDED)
41c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
42c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        # The stop reason of the thread should be breakpoint.
43c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
44c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan            substrs = ['stopped',
45c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan                       'stop reason = breakpoint'])
46c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
47c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        # The breakpoint should have a hit count of 1.
48c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.expect("breakpoint list -f", BREAKPOINT_HIT_ONCE,
49c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan            substrs = [' resolved, hit count = 1'])
50c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
513e947331353b5fcadc7416beb48b9ccf0f558a47Daniel Malea        self.runCmd("next")
523e947331353b5fcadc7416beb48b9ccf0f558a47Daniel Malea
53c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        # Try frame variable.
54c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.expect("frame variable index", VARIABLES_DISPLAYED_CORRECTLY,
55c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan            substrs = ['(int32_t) index = 512'])
56c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
57c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        # Try an interpreted expression.
58c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.expect("expr (index + 512)", VARIABLES_DISPLAYED_CORRECTLY,
59c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan            substrs = ['(int) $0 = 1024'])
60c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
61c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        # Try a JITted expression.
62c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.expect("expr (int)getpid(); (index - 256)", VARIABLES_DISPLAYED_CORRECTLY,
63c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan            substrs = ['(int) $1 = 256'])
64c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
65c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan        self.runCmd("kill")
66c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan
67c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callananif __name__ == '__main__':
68c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    import atexit
69c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    lldb.SBDebugger.Initialize()
70c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    atexit.register(lambda: lldb.SBDebugger.Terminate())
71c6bdc75b993e8e16c0c035e3c6a59891568f03a4Sean Callanan    unittest2.main()
72