xref: /llvm-project/lldb/test/API/functionalities/non-overlapping-index-variable-i/TestIndexVariable.py (revision 4cc8f2a017c76af25234afc7c380550e9c93135c)
1"""Test evaluating expressions which ref. index variable 'i' which just goes
2from out of scope to in scope when stopped at the breakpoint."""
3
4
5
6import lldb
7from lldbsuite.test.lldbtest import *
8import lldbsuite.test.lldbutil as lldbutil
9
10
11class NonOverlappingIndexVariableCase(TestBase):
12
13    def setUp(self):
14        TestBase.setUp(self)
15        self.source = 'main.cpp'
16        self.line_to_break = line_number(
17            self.source, '// Set breakpoint here.')
18
19    # rdar://problem/9890530
20    def test_eval_index_variable(self):
21        """Test expressions of variable 'i' which appears in two for loops."""
22        self.build()
23        self.runCmd("file " + self.getBuildArtifact("a.out"),
24                    CURRENT_EXECUTABLE_SET)
25
26        lldbutil.run_break_set_by_file_and_line(
27            self,
28            self.source,
29            self.line_to_break,
30            num_expected_locations=1,
31            loc_exact=True)
32
33        self.runCmd("run", RUN_SUCCEEDED)
34
35        # The stop reason of the thread should be breakpoint.
36        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
37                    substrs=['stopped',
38                             'stop reason = breakpoint'])
39
40        self.runCmd('frame variable i')
41        self.runCmd('expr i')
42        self.runCmd('expr ptr[0]->point.x')
43        self.runCmd('expr ptr[0]->point.y')
44        self.runCmd('expr ptr[i]->point.x')
45        self.runCmd('expr ptr[i]->point.y')
46