xref: /llvm-project/lldb/test/API/functionalities/non-overlapping-index-variable-i/TestIndexVariable.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
199451b44SJordan Rupprecht"""Test evaluating expressions which ref. index variable 'i' which just goes
299451b44SJordan Rupprechtfrom out of scope to in scope when stopped at the breakpoint."""
399451b44SJordan Rupprecht
499451b44SJordan Rupprecht
599451b44SJordan Rupprechtimport lldb
699451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
799451b44SJordan Rupprechtimport lldbsuite.test.lldbutil as lldbutil
899451b44SJordan Rupprecht
999451b44SJordan Rupprecht
1099451b44SJordan Rupprechtclass NonOverlappingIndexVariableCase(TestBase):
1199451b44SJordan Rupprecht    def setUp(self):
1299451b44SJordan Rupprecht        TestBase.setUp(self)
13*2238dcc3SJonas Devlieghere        self.source = "main.cpp"
14*2238dcc3SJonas Devlieghere        self.line_to_break = line_number(self.source, "// Set breakpoint here.")
1599451b44SJordan Rupprecht
1699451b44SJordan Rupprecht    # rdar://problem/9890530
1799451b44SJordan Rupprecht    def test_eval_index_variable(self):
1899451b44SJordan Rupprecht        """Test expressions of variable 'i' which appears in two for loops."""
1999451b44SJordan Rupprecht        self.build()
20*2238dcc3SJonas Devlieghere        self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
2199451b44SJordan Rupprecht
2299451b44SJordan Rupprecht        lldbutil.run_break_set_by_file_and_line(
2399451b44SJordan Rupprecht            self,
2499451b44SJordan Rupprecht            self.source,
2599451b44SJordan Rupprecht            self.line_to_break,
2699451b44SJordan Rupprecht            num_expected_locations=1,
27*2238dcc3SJonas Devlieghere            loc_exact=True,
28*2238dcc3SJonas Devlieghere        )
2999451b44SJordan Rupprecht
3099451b44SJordan Rupprecht        self.runCmd("run", RUN_SUCCEEDED)
3199451b44SJordan Rupprecht
3299451b44SJordan Rupprecht        # The stop reason of the thread should be breakpoint.
33*2238dcc3SJonas Devlieghere        self.expect(
34*2238dcc3SJonas Devlieghere            "thread list",
35*2238dcc3SJonas Devlieghere            STOPPED_DUE_TO_BREAKPOINT,
36*2238dcc3SJonas Devlieghere            substrs=["stopped", "stop reason = breakpoint"],
37*2238dcc3SJonas Devlieghere        )
3899451b44SJordan Rupprecht
39*2238dcc3SJonas Devlieghere        self.runCmd("frame variable i")
40*2238dcc3SJonas Devlieghere        self.runCmd("expr i")
41*2238dcc3SJonas Devlieghere        self.runCmd("expr ptr[0]->point.x")
42*2238dcc3SJonas Devlieghere        self.runCmd("expr ptr[0]->point.y")
43*2238dcc3SJonas Devlieghere        self.runCmd("expr ptr[i]->point.x")
44*2238dcc3SJonas Devlieghere        self.runCmd("expr ptr[i]->point.y")
45