199451b44SJordan Rupprecht"""Test variable lookup when stopped in inline functions."""
299451b44SJordan Rupprecht
399451b44SJordan Rupprecht
499451b44SJordan Rupprechtimport lldb
599451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
699451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
799451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
899451b44SJordan Rupprecht
999451b44SJordan Rupprecht
1099451b44SJordan Rupprechtclass InlinesTestCase(TestBase):
1199451b44SJordan Rupprecht
1299451b44SJordan Rupprecht    def setUp(self):
1399451b44SJordan Rupprecht        # Call super's setUp().
1499451b44SJordan Rupprecht        TestBase.setUp(self)
1599451b44SJordan Rupprecht        # Find the line number to break inside main().
1699451b44SJordan Rupprecht        self.line = line_number(
1799451b44SJordan Rupprecht            'inlines.cpp',
1899451b44SJordan Rupprecht            '// Set break point at this line.')
1999451b44SJordan Rupprecht
2099451b44SJordan Rupprecht    def test(self):
2199451b44SJordan Rupprecht        """Test that local variables are visible in expressions."""
2299451b44SJordan Rupprecht        self.build()
2399451b44SJordan Rupprecht        self.runToBreakpoint()
2499451b44SJordan Rupprecht
2599451b44SJordan Rupprecht        # Check that 'frame variable' finds a variable
2699451b44SJordan Rupprecht        self.expect(
2799451b44SJordan Rupprecht            "frame variable inner_input",
2899451b44SJordan Rupprecht            VARIABLES_DISPLAYED_CORRECTLY,
2999451b44SJordan Rupprecht            startstr='(int) inner_input =')
3099451b44SJordan Rupprecht
3199451b44SJordan Rupprecht        # Check that 'expr' finds a variable
3299451b44SJordan Rupprecht        self.expect("expr inner_input", VARIABLES_DISPLAYED_CORRECTLY,
3399451b44SJordan Rupprecht                    startstr='(int) $0 =')
3499451b44SJordan Rupprecht
3599451b44SJordan Rupprecht    def runToBreakpoint(self):
3699451b44SJordan Rupprecht        exe = self.getBuildArtifact("a.out")
3799451b44SJordan Rupprecht        self.runCmd("file " + exe, CURRENT_EXECUTABLE_SET)
3899451b44SJordan Rupprecht
3999451b44SJordan Rupprecht        # Break inside the main.
4099451b44SJordan Rupprecht        lldbutil.run_break_set_by_file_and_line(
4199451b44SJordan Rupprecht            self,
4299451b44SJordan Rupprecht            "inlines.cpp",
4399451b44SJordan Rupprecht            self.line,
4499451b44SJordan Rupprecht            num_expected_locations=2,
4599451b44SJordan Rupprecht            loc_exact=True)
4699451b44SJordan Rupprecht
4799451b44SJordan Rupprecht        self.runCmd("run", RUN_SUCCEEDED)
4899451b44SJordan Rupprecht
4999451b44SJordan Rupprecht        # The stop reason of the thread should be breakpoint.
5099451b44SJordan Rupprecht        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
5199451b44SJordan Rupprecht                    substrs=['stopped',
5299451b44SJordan Rupprecht                             'stop reason = breakpoint'])
5399451b44SJordan Rupprecht
5499451b44SJordan Rupprecht        # The breakpoint should have a hit count of 1.
55*9f0b5f9aSSYNOPSYS\georgiev        lldbutil.check_breakpoint(self, bpno = 1, expected_hit_count = 1)
56