199451b44SJordan Rupprecht"""
299451b44SJordan RupprechtTest breakpoint commands for a breakpoint ID with multiple locations.
399451b44SJordan Rupprecht"""
499451b44SJordan Rupprecht
599451b44SJordan Rupprecht
699451b44SJordan Rupprechtimport lldb
799451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
899451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
999451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
1099451b44SJordan Rupprecht
1199451b44SJordan Rupprecht
1299451b44SJordan Rupprechtclass BreakpointLocationsTestCase(TestBase):
1399451b44SJordan Rupprecht    @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24528")
1499451b44SJordan Rupprecht    def test_enable(self):
1599451b44SJordan Rupprecht        """Test breakpoint enable/disable for a breakpoint ID with multiple locations."""
1699451b44SJordan Rupprecht        self.build()
1799451b44SJordan Rupprecht        self.breakpoint_locations_test()
1899451b44SJordan Rupprecht
1999451b44SJordan Rupprecht    def test_shadowed_cond_options(self):
2099451b44SJordan Rupprecht        """Test that options set on the breakpoint and location behave correctly."""
2199451b44SJordan Rupprecht        self.build()
2299451b44SJordan Rupprecht        self.shadowed_bkpt_cond_test()
2399451b44SJordan Rupprecht
2499451b44SJordan Rupprecht    def test_shadowed_command_options(self):
2599451b44SJordan Rupprecht        """Test that options set on the breakpoint and location behave correctly."""
2699451b44SJordan Rupprecht        self.build()
2799451b44SJordan Rupprecht        self.shadowed_bkpt_command_test()
2899451b44SJordan Rupprecht
2999451b44SJordan Rupprecht    def setUp(self):
3099451b44SJordan Rupprecht        # Call super's setUp().
3199451b44SJordan Rupprecht        TestBase.setUp(self)
3299451b44SJordan Rupprecht        # Find the line number to break inside main().
332238dcc3SJonas Devlieghere        self.line = line_number("main.c", "// Set break point at this line.")
3499451b44SJordan Rupprecht
3599451b44SJordan Rupprecht    def set_breakpoint(self):
3699451b44SJordan Rupprecht        exe = self.getBuildArtifact("a.out")
3799451b44SJordan Rupprecht        target = self.dbg.CreateTarget(exe)
3899451b44SJordan Rupprecht        self.assertTrue(target, "Target %s is not valid" % (exe))
3999451b44SJordan Rupprecht
4099451b44SJordan Rupprecht        # This should create a breakpoint with 3 locations.
4199451b44SJordan Rupprecht
4299451b44SJordan Rupprecht        bkpt = target.BreakpointCreateByLocation("main.c", self.line)
4399451b44SJordan Rupprecht
4499451b44SJordan Rupprecht        # The breakpoint list should show 3 locations.
4599451b44SJordan Rupprecht        self.assertEqual(bkpt.GetNumLocations(), 3, "Wrong number of locations")
4699451b44SJordan Rupprecht
4799451b44SJordan Rupprecht        self.expect(
4899451b44SJordan Rupprecht            "breakpoint list -f",
4999451b44SJordan Rupprecht            "Breakpoint locations shown correctly",
5099451b44SJordan Rupprecht            substrs=[
512238dcc3SJonas Devlieghere                "1: file = 'main.c', line = %d, exact_match = 0, locations = 3"
522238dcc3SJonas Devlieghere                % self.line
532238dcc3SJonas Devlieghere            ],
5499451b44SJordan Rupprecht            patterns=[
5599451b44SJordan Rupprecht                "where = a.out`func_inlined .+unresolved, hit count = 0",
562238dcc3SJonas Devlieghere                "where = a.out`main .+\[inlined\].+unresolved, hit count = 0",
572238dcc3SJonas Devlieghere            ],
582238dcc3SJonas Devlieghere        )
5999451b44SJordan Rupprecht
6099451b44SJordan Rupprecht        return bkpt
6199451b44SJordan Rupprecht
6299451b44SJordan Rupprecht    def shadowed_bkpt_cond_test(self):
6399451b44SJordan Rupprecht        """Test that options set on the breakpoint and location behave correctly."""
6499451b44SJordan Rupprecht        # Breakpoint option propagation from bkpt to loc used to be done the first time
6599451b44SJordan Rupprecht        # a breakpoint location option was specifically set.  After that the other options
6699451b44SJordan Rupprecht        # on that location would stop tracking the breakpoint.  That got fixed, and this test
6799451b44SJordan Rupprecht        # makes sure only the option touched is affected.
6899451b44SJordan Rupprecht
6999451b44SJordan Rupprecht        bkpt = self.set_breakpoint()
7099451b44SJordan Rupprecht        bkpt_cond = "1 == 0"
7199451b44SJordan Rupprecht        bkpt.SetCondition(bkpt_cond)
7299451b44SJordan Rupprecht        self.assertEqual(bkpt.GetCondition(), bkpt_cond, "Successfully set condition")
7380fcecb1SJonas Devlieghere        self.assertEqual(
742238dcc3SJonas Devlieghere            bkpt.location[0].GetCondition(),
752238dcc3SJonas Devlieghere            bkpt.GetCondition(),
762238dcc3SJonas Devlieghere            "Conditions are the same",
772238dcc3SJonas Devlieghere        )
7899451b44SJordan Rupprecht
7999451b44SJordan Rupprecht        # Now set a condition on the locations, make sure that this doesn't effect the bkpt:
8099451b44SJordan Rupprecht        bkpt_loc_1_cond = "1 == 1"
8199451b44SJordan Rupprecht        bkpt.location[0].SetCondition(bkpt_loc_1_cond)
822238dcc3SJonas Devlieghere        self.assertEqual(
832238dcc3SJonas Devlieghere            bkpt.location[0].GetCondition(),
842238dcc3SJonas Devlieghere            bkpt_loc_1_cond,
852238dcc3SJonas Devlieghere            "Successfully changed location condition",
862238dcc3SJonas Devlieghere        )
872238dcc3SJonas Devlieghere        self.assertNotEqual(
882238dcc3SJonas Devlieghere            bkpt.GetCondition(),
892238dcc3SJonas Devlieghere            bkpt_loc_1_cond,
902238dcc3SJonas Devlieghere            "Changed location changed Breakpoint condition",
912238dcc3SJonas Devlieghere        )
922238dcc3SJonas Devlieghere        self.assertEqual(
932238dcc3SJonas Devlieghere            bkpt.location[1].GetCondition(),
942238dcc3SJonas Devlieghere            bkpt_cond,
952238dcc3SJonas Devlieghere            "Changed another location's condition",
962238dcc3SJonas Devlieghere        )
9799451b44SJordan Rupprecht
9899451b44SJordan Rupprecht        # Now make sure that setting one options doesn't fix the value of another:
9999451b44SJordan Rupprecht        bkpt.SetIgnoreCount(10)
10099451b44SJordan Rupprecht        self.assertEqual(bkpt.GetIgnoreCount(), 10, "Set the ignore count successfully")
1012238dcc3SJonas Devlieghere        self.assertEqual(
1022238dcc3SJonas Devlieghere            bkpt.location[0].GetIgnoreCount(),
1032238dcc3SJonas Devlieghere            10,
1042238dcc3SJonas Devlieghere            "Location doesn't track top-level bkpt.",
1052238dcc3SJonas Devlieghere        )
10699451b44SJordan Rupprecht
10799451b44SJordan Rupprecht        # Now make sure resetting the condition to "" resets the tracking:
10899451b44SJordan Rupprecht        bkpt.location[0].SetCondition("")
10999451b44SJordan Rupprecht        bkpt_new_cond = "1 == 3"
11099451b44SJordan Rupprecht        bkpt.SetCondition(bkpt_new_cond)
1112238dcc3SJonas Devlieghere        self.assertEqual(
1122238dcc3SJonas Devlieghere            bkpt.location[0].GetCondition(),
1132238dcc3SJonas Devlieghere            bkpt_new_cond,
1142238dcc3SJonas Devlieghere            "Didn't go back to tracking condition",
1152238dcc3SJonas Devlieghere        )
11699451b44SJordan Rupprecht
1172e6b6522SSlava Gurevich        # Test that set/get accessor methods on BreakpointLocation behave correctly.
1182e6b6522SSlava Gurevich        bkpt_loc = bkpt.GetLocationAtIndex(0)
1192e6b6522SSlava Gurevich
1202e6b6522SSlava Gurevich        value = "MyQueue"
1212e6b6522SSlava Gurevich        bkpt_loc.SetQueueName(value)
1222238dcc3SJonas Devlieghere        self.assertEqual(
1232238dcc3SJonas Devlieghere            bkpt_loc.GetQueueName(), value, "Successfully set/get bp location QueueName"
1242238dcc3SJonas Devlieghere        )
1252e6b6522SSlava Gurevich
1262e6b6522SSlava Gurevich        value = 5
1272e6b6522SSlava Gurevich        bkpt_loc.SetThreadID(value)
1282238dcc3SJonas Devlieghere        self.assertEqual(
1292238dcc3SJonas Devlieghere            bkpt_loc.GetThreadID(), value, "Successfully set/get bp location ThreadID"
1302238dcc3SJonas Devlieghere        )
1312e6b6522SSlava Gurevich
1322e6b6522SSlava Gurevich        value = "1 == 0"
1332e6b6522SSlava Gurevich        bkpt_loc.SetCondition(value)
1342238dcc3SJonas Devlieghere        self.assertEqual(
1352238dcc3SJonas Devlieghere            bkpt_loc.GetCondition(), value, "Successfully set/get bp location Condition"
1362238dcc3SJonas Devlieghere        )
1372e6b6522SSlava Gurevich
1382e6b6522SSlava Gurevich        value = 6
1392e6b6522SSlava Gurevich        bkpt_loc.SetThreadIndex(value)
1402238dcc3SJonas Devlieghere        self.assertEqual(
1412238dcc3SJonas Devlieghere            bkpt_loc.GetThreadIndex(),
1422238dcc3SJonas Devlieghere            value,
1432238dcc3SJonas Devlieghere            "Successfully set/get bp location ThreadIndex",
1442238dcc3SJonas Devlieghere        )
1452e6b6522SSlava Gurevich
1462e6b6522SSlava Gurevich        value = "MyThread"
1472e6b6522SSlava Gurevich        bkpt_loc.SetThreadName(value)
1482238dcc3SJonas Devlieghere        self.assertEqual(
1492238dcc3SJonas Devlieghere            bkpt_loc.GetThreadName(),
1502238dcc3SJonas Devlieghere            value,
1512238dcc3SJonas Devlieghere            "Successfully set/get bp location ThreadName",
1522238dcc3SJonas Devlieghere        )
1532e6b6522SSlava Gurevich
1542e6b6522SSlava Gurevich        value = 5
1552e6b6522SSlava Gurevich        bkpt_loc.SetIgnoreCount(value)
1562238dcc3SJonas Devlieghere        self.assertEqual(
1572238dcc3SJonas Devlieghere            bkpt_loc.GetIgnoreCount(),
1582238dcc3SJonas Devlieghere            value,
1592238dcc3SJonas Devlieghere            "Successfully set/get bp location IgnoreCount",
1602238dcc3SJonas Devlieghere        )
1612e6b6522SSlava Gurevich
1622e6b6522SSlava Gurevich        for value in [True, False]:
1632e6b6522SSlava Gurevich            bkpt_loc.SetAutoContinue(value)
1642238dcc3SJonas Devlieghere            self.assertEqual(
1652238dcc3SJonas Devlieghere                bkpt_loc.GetAutoContinue(),
1662238dcc3SJonas Devlieghere                value,
1672238dcc3SJonas Devlieghere                "Successfully set/get bp location AutoContinue",
1682238dcc3SJonas Devlieghere            )
1692e6b6522SSlava Gurevich
1702e6b6522SSlava Gurevich        for value in [True, False]:
1712e6b6522SSlava Gurevich            bkpt_loc.SetEnabled(value)
1722238dcc3SJonas Devlieghere            self.assertEqual(
1732238dcc3SJonas Devlieghere                bkpt_loc.IsEnabled(),
1742238dcc3SJonas Devlieghere                value,
1752238dcc3SJonas Devlieghere                "Successfully set/get bp location SetEnabled",
1762238dcc3SJonas Devlieghere            )
1772e6b6522SSlava Gurevich
1782e6b6522SSlava Gurevich        # test set/get CommandLineCommands
1792e6b6522SSlava Gurevich        set_cmds = lldb.SBStringList()
1802e6b6522SSlava Gurevich        set_cmds.AppendString("frame var")
1812e6b6522SSlava Gurevich        set_cmds.AppendString("bt")
1822e6b6522SSlava Gurevich        bkpt_loc.SetCommandLineCommands(set_cmds)
1832e6b6522SSlava Gurevich
1842e6b6522SSlava Gurevich        get_cmds = lldb.SBStringList()
1852e6b6522SSlava Gurevich        bkpt_loc.GetCommandLineCommands(get_cmds)
1862238dcc3SJonas Devlieghere        self.assertEqual(
1872238dcc3SJonas Devlieghere            set_cmds.GetSize(), get_cmds.GetSize(), "Size of command line commands"
1882238dcc3SJonas Devlieghere        )
1892e6b6522SSlava Gurevich        for idx, _ in enumerate(set_cmds):
1902238dcc3SJonas Devlieghere            self.assertEqual(
1912238dcc3SJonas Devlieghere                set_cmds.GetStringAtIndex(idx),
1922238dcc3SJonas Devlieghere                get_cmds.GetStringAtIndex(idx),
1932238dcc3SJonas Devlieghere                "Command %d" % (idx),
1942238dcc3SJonas Devlieghere            )
1952e6b6522SSlava Gurevich
19699451b44SJordan Rupprecht    def shadowed_bkpt_command_test(self):
19799451b44SJordan Rupprecht        """Test that options set on the breakpoint and location behave correctly."""
19899451b44SJordan Rupprecht        # Breakpoint option propagation from bkpt to loc used to be done the first time
19999451b44SJordan Rupprecht        # a breakpoint location option was specifically set.  After that the other options
20099451b44SJordan Rupprecht        # on that location would stop tracking the breakpoint.  That got fixed, and this test
20199451b44SJordan Rupprecht        # makes sure only the option touched is affected.
20299451b44SJordan Rupprecht
20399451b44SJordan Rupprecht        bkpt = self.set_breakpoint()
20499451b44SJordan Rupprecht        commands = ["AAAAAA", "BBBBBB", "CCCCCC"]
20599451b44SJordan Rupprecht        str_list = lldb.SBStringList()
20699451b44SJordan Rupprecht        str_list.AppendList(commands, len(commands))
20799451b44SJordan Rupprecht
20899451b44SJordan Rupprecht        bkpt.SetCommandLineCommands(str_list)
20999451b44SJordan Rupprecht        cmd_list = lldb.SBStringList()
21099451b44SJordan Rupprecht        bkpt.GetCommandLineCommands(cmd_list)
21199451b44SJordan Rupprecht        list_size = str_list.GetSize()
2122238dcc3SJonas Devlieghere        self.assertEqual(
2132238dcc3SJonas Devlieghere            cmd_list.GetSize(), list_size, "Added the right number of commands"
2142238dcc3SJonas Devlieghere        )
21599451b44SJordan Rupprecht        for i in range(0, list_size):
2162238dcc3SJonas Devlieghere            self.assertEqual(
2172238dcc3SJonas Devlieghere                str_list.GetStringAtIndex(i),
2182238dcc3SJonas Devlieghere                cmd_list.GetStringAtIndex(i),
2192238dcc3SJonas Devlieghere                "Mismatched commands.",
2202238dcc3SJonas Devlieghere            )
22199451b44SJordan Rupprecht
22299451b44SJordan Rupprecht        commands = ["DDDDDD", "EEEEEE", "FFFFFF", "GGGGGG"]
22399451b44SJordan Rupprecht        loc_list = lldb.SBStringList()
22499451b44SJordan Rupprecht        loc_list.AppendList(commands, len(commands))
22599451b44SJordan Rupprecht        bkpt.location[1].SetCommandLineCommands(loc_list)
22699451b44SJordan Rupprecht        loc_cmd_list = lldb.SBStringList()
22799451b44SJordan Rupprecht        bkpt.location[1].GetCommandLineCommands(loc_cmd_list)
22899451b44SJordan Rupprecht
22999451b44SJordan Rupprecht        loc_list_size = loc_list.GetSize()
23099451b44SJordan Rupprecht
23199451b44SJordan Rupprecht        # Check that the location has the right commands:
2322238dcc3SJonas Devlieghere        self.assertEqual(
2332238dcc3SJonas Devlieghere            loc_cmd_list.GetSize(),
2342238dcc3SJonas Devlieghere            loc_list_size,
2352238dcc3SJonas Devlieghere            "Added the right number of commands to location",
2362238dcc3SJonas Devlieghere        )
23799451b44SJordan Rupprecht        for i in range(0, loc_list_size):
2382238dcc3SJonas Devlieghere            self.assertEqual(
2392238dcc3SJonas Devlieghere                loc_list.GetStringAtIndex(i),
2402238dcc3SJonas Devlieghere                loc_cmd_list.GetStringAtIndex(i),
2412238dcc3SJonas Devlieghere                "Mismatched commands.",
2422238dcc3SJonas Devlieghere            )
24399451b44SJordan Rupprecht
24499451b44SJordan Rupprecht        # Check that we didn't mess up the breakpoint level commands:
2452238dcc3SJonas Devlieghere        self.assertEqual(
2462238dcc3SJonas Devlieghere            cmd_list.GetSize(), list_size, "Added the right number of commands"
2472238dcc3SJonas Devlieghere        )
24899451b44SJordan Rupprecht        for i in range(0, list_size):
2492238dcc3SJonas Devlieghere            self.assertEqual(
2502238dcc3SJonas Devlieghere                str_list.GetStringAtIndex(i),
2512238dcc3SJonas Devlieghere                cmd_list.GetStringAtIndex(i),
2522238dcc3SJonas Devlieghere                "Mismatched commands.",
2532238dcc3SJonas Devlieghere            )
25499451b44SJordan Rupprecht
25599451b44SJordan Rupprecht        # And check we didn't mess up another location:
25699451b44SJordan Rupprecht        untouched_loc_cmds = lldb.SBStringList()
25799451b44SJordan Rupprecht        bkpt.location[0].GetCommandLineCommands(untouched_loc_cmds)
25899451b44SJordan Rupprecht        self.assertEqual(untouched_loc_cmds.GetSize(), 0, "Changed the wrong location")
25999451b44SJordan Rupprecht
26099451b44SJordan Rupprecht    def breakpoint_locations_test(self):
26199451b44SJordan Rupprecht        """Test breakpoint enable/disable for a breakpoint ID with multiple locations."""
26299451b44SJordan Rupprecht        self.set_breakpoint()
26399451b44SJordan Rupprecht
26499451b44SJordan Rupprecht        # The 'breakpoint disable 3.*' command should fail gracefully.
2652238dcc3SJonas Devlieghere        self.expect(
2662238dcc3SJonas Devlieghere            "breakpoint disable 3.*",
26799451b44SJordan Rupprecht            "Disabling an invalid breakpoint should fail gracefully",
26899451b44SJordan Rupprecht            error=True,
2692238dcc3SJonas Devlieghere            startstr="error: '3' is not a valid breakpoint ID.",
2702238dcc3SJonas Devlieghere        )
27199451b44SJordan Rupprecht
27299451b44SJordan Rupprecht        # The 'breakpoint disable 1.*' command should disable all 3 locations.
27399451b44SJordan Rupprecht        self.expect(
27499451b44SJordan Rupprecht            "breakpoint disable 1.*",
27599451b44SJordan Rupprecht            "All 3 breakpoint locatons disabled correctly",
2762238dcc3SJonas Devlieghere            startstr="3 breakpoints disabled.",
2772238dcc3SJonas Devlieghere        )
27899451b44SJordan Rupprecht
27999451b44SJordan Rupprecht        # Run the program.
28099451b44SJordan Rupprecht        self.runCmd("run", RUN_SUCCEEDED)
28199451b44SJordan Rupprecht
28299451b44SJordan Rupprecht        # We should not stopped on any breakpoint at all.
2832238dcc3SJonas Devlieghere        self.expect(
2842238dcc3SJonas Devlieghere            "process status",
2852238dcc3SJonas Devlieghere            "No stopping on any disabled breakpoint",
2862238dcc3SJonas Devlieghere            patterns=["^Process [0-9]+ exited with status = 0"],
2872238dcc3SJonas Devlieghere        )
28899451b44SJordan Rupprecht
28999451b44SJordan Rupprecht        # The 'breakpoint enable 1.*' command should enable all 3 breakpoints.
29099451b44SJordan Rupprecht        self.expect(
29199451b44SJordan Rupprecht            "breakpoint enable 1.*",
29299451b44SJordan Rupprecht            "All 3 breakpoint locatons enabled correctly",
2932238dcc3SJonas Devlieghere            startstr="3 breakpoints enabled.",
2942238dcc3SJonas Devlieghere        )
29599451b44SJordan Rupprecht
296*a6caceedSJordan Rupprecht        # The 'breakpoint enable 1.' command should not crash.
297*a6caceedSJordan Rupprecht        self.expect(
298*a6caceedSJordan Rupprecht            "breakpoint enable 1.",
299*a6caceedSJordan Rupprecht            startstr="0 breakpoints enabled.",
300*a6caceedSJordan Rupprecht        )
301*a6caceedSJordan Rupprecht
30299451b44SJordan Rupprecht        # The 'breakpoint disable 1.1' command should disable 1 location.
30399451b44SJordan Rupprecht        self.expect(
30499451b44SJordan Rupprecht            "breakpoint disable 1.1",
30599451b44SJordan Rupprecht            "1 breakpoint locatons disabled correctly",
3062238dcc3SJonas Devlieghere            startstr="1 breakpoints disabled.",
3072238dcc3SJonas Devlieghere        )
30899451b44SJordan Rupprecht
30999451b44SJordan Rupprecht        # Run the program again.  We should stop on the two breakpoint
31099451b44SJordan Rupprecht        # locations.
31199451b44SJordan Rupprecht        self.runCmd("run", RUN_SUCCEEDED)
31299451b44SJordan Rupprecht
31399451b44SJordan Rupprecht        # Stopped once.
3142238dcc3SJonas Devlieghere        self.expect(
3152238dcc3SJonas Devlieghere            "thread backtrace",
3162238dcc3SJonas Devlieghere            STOPPED_DUE_TO_BREAKPOINT,
3172238dcc3SJonas Devlieghere            substrs=["stop reason = breakpoint 1."],
3182238dcc3SJonas Devlieghere        )
31999451b44SJordan Rupprecht
32099451b44SJordan Rupprecht        # Continue the program, there should be another stop.
32199451b44SJordan Rupprecht        self.runCmd("process continue")
32299451b44SJordan Rupprecht
32399451b44SJordan Rupprecht        # Stopped again.
3242238dcc3SJonas Devlieghere        self.expect(
3252238dcc3SJonas Devlieghere            "thread backtrace",
3262238dcc3SJonas Devlieghere            STOPPED_DUE_TO_BREAKPOINT,
3272238dcc3SJonas Devlieghere            substrs=["stop reason = breakpoint 1."],
3282238dcc3SJonas Devlieghere        )
32999451b44SJordan Rupprecht
33099451b44SJordan Rupprecht        # At this point, 1.1 has a hit count of 0 and the other a hit count of
33199451b44SJordan Rupprecht        # 1".
3322238dcc3SJonas Devlieghere        lldbutil.check_breakpoint(
3332238dcc3SJonas Devlieghere            self,
3342238dcc3SJonas Devlieghere            bpno=1,
3352238dcc3SJonas Devlieghere            expected_locations=3,
3362238dcc3SJonas Devlieghere            expected_resolved_count=2,
3372238dcc3SJonas Devlieghere            expected_hit_count=2,
3382238dcc3SJonas Devlieghere        )
3392238dcc3SJonas Devlieghere        lldbutil.check_breakpoint(
3402238dcc3SJonas Devlieghere            self,
3412238dcc3SJonas Devlieghere            bpno=1,
3422238dcc3SJonas Devlieghere            location_id=1,
3432238dcc3SJonas Devlieghere            expected_location_resolved=False,
3442238dcc3SJonas Devlieghere            expected_location_hit_count=0,
3452238dcc3SJonas Devlieghere        )
3462238dcc3SJonas Devlieghere        lldbutil.check_breakpoint(
3472238dcc3SJonas Devlieghere            self,
3482238dcc3SJonas Devlieghere            bpno=1,
3492238dcc3SJonas Devlieghere            location_id=2,
3502238dcc3SJonas Devlieghere            expected_location_resolved=True,
3512238dcc3SJonas Devlieghere            expected_location_hit_count=1,
3522238dcc3SJonas Devlieghere        )
3532238dcc3SJonas Devlieghere        lldbutil.check_breakpoint(
3542238dcc3SJonas Devlieghere            self,
3552238dcc3SJonas Devlieghere            bpno=1,
3562238dcc3SJonas Devlieghere            location_id=3,
3572238dcc3SJonas Devlieghere            expected_location_resolved=True,
3582238dcc3SJonas Devlieghere            expected_location_hit_count=1,
3592238dcc3SJonas Devlieghere        )
360