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