https://github.com/jimingham updated https://github.com/llvm/llvm-project/pull/114337
>From 48c51370545165095867c480ddf8b7fdbb312630 Mon Sep 17 00:00:00 2001 From: Jim Ingham <jing...@apple.com> Date: Wed, 30 Oct 2024 17:18:39 -0700 Subject: [PATCH 1/2] Fix stepping away from the bottom-most frame of a virtual inlined call stack. --- lldb/source/Target/ThreadPlanStepInRange.cpp | 3 ++- .../inline-stepping/TestInlineStepping.py | 11 ++++++++++- .../API/functionalities/inline-stepping/calling.cpp | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lldb/source/Target/ThreadPlanStepInRange.cpp b/lldb/source/Target/ThreadPlanStepInRange.cpp index 325a70619908b6..224a17d896ccf0 100644 --- a/lldb/source/Target/ThreadPlanStepInRange.cpp +++ b/lldb/source/Target/ThreadPlanStepInRange.cpp @@ -489,7 +489,8 @@ bool ThreadPlanStepInRange::DoWillResume(lldb::StateType resume_state, bool ThreadPlanStepInRange::IsVirtualStep() { if (m_virtual_step == eLazyBoolCalculate) { Thread &thread = GetThread(); - if (thread.GetCurrentInlinedDepth() == UINT32_MAX) + uint32_t cur_inline_depth = thread.GetCurrentInlinedDepth(); + if (cur_inline_depth == UINT32_MAX || cur_inline_depth == 0) m_virtual_step = eLazyBoolNo; else m_virtual_step = eLazyBoolYes; diff --git a/lldb/test/API/functionalities/inline-stepping/TestInlineStepping.py b/lldb/test/API/functionalities/inline-stepping/TestInlineStepping.py index f52e0f0fd5bcfe..fe61b8e48f6d6d 100644 --- a/lldb/test/API/functionalities/inline-stepping/TestInlineStepping.py +++ b/lldb/test/API/functionalities/inline-stepping/TestInlineStepping.py @@ -364,7 +364,7 @@ def step_in_template(self): step_sequence = [["// In max_value specialized", "into"]] self.run_step_sequence(step_sequence) - def run_to_call_site_and_step(self, source_regex, func_name, start_pos): + def run_to_call_site_and_step(self, source_regex, func_name, start_pos, one_more_step_loc = None): main_spec = lldb.SBFileSpec("calling.cpp") # Set the breakpoint by file and line, not sourced regex because # we want to make sure we can set breakpoints on call sites: @@ -408,6 +408,11 @@ def run_to_call_site_and_step(self, source_regex, func_name, start_pos): # stepping for this function... break + if one_more_step_loc: + thread.StepInto() + frame_0 = thread.frame[0] + self.assertEqual(frame_0.line_entry.line, line_number(self.main_source, one_more_step_loc), + "Was able to step one more time") process.Kill() target.Clear() @@ -420,3 +425,7 @@ def virtual_inline_stepping(self): self.run_to_call_site_and_step( "In caller_trivial_inline_2", "caller_trivial_inline_2", 3 ) + self.run_to_call_site_and_step( + "In caller_trivial_inline_3", "caller_trivial_inline_3", 4, "After caller_trivial_inline_3" + ) + diff --git a/lldb/test/API/functionalities/inline-stepping/calling.cpp b/lldb/test/API/functionalities/inline-stepping/calling.cpp index d7ee56b3c07909..7ed88a872c4eba 100644 --- a/lldb/test/API/functionalities/inline-stepping/calling.cpp +++ b/lldb/test/API/functionalities/inline-stepping/calling.cpp @@ -95,7 +95,7 @@ void caller_trivial_inline_1() { void caller_trivial_inline_2() { caller_trivial_inline_3(); // In caller_trivial_inline_2. - inline_value += 1; + inline_value += 1; // After caller_trivial_inline_3 } void caller_trivial_inline_3() { >From 3617a91f4e85a7a8de09dacfd3931abc729e44f2 Mon Sep 17 00:00:00 2001 From: Jim Ingham <jing...@apple.com> Date: Wed, 30 Oct 2024 18:01:20 -0700 Subject: [PATCH 2/2] uglification --- .../inline-stepping/TestInlineStepping.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/lldb/test/API/functionalities/inline-stepping/TestInlineStepping.py b/lldb/test/API/functionalities/inline-stepping/TestInlineStepping.py index fe61b8e48f6d6d..3283918f852743 100644 --- a/lldb/test/API/functionalities/inline-stepping/TestInlineStepping.py +++ b/lldb/test/API/functionalities/inline-stepping/TestInlineStepping.py @@ -364,7 +364,9 @@ def step_in_template(self): step_sequence = [["// In max_value specialized", "into"]] self.run_step_sequence(step_sequence) - def run_to_call_site_and_step(self, source_regex, func_name, start_pos, one_more_step_loc = None): + def run_to_call_site_and_step( + self, source_regex, func_name, start_pos, one_more_step_loc=None + ): main_spec = lldb.SBFileSpec("calling.cpp") # Set the breakpoint by file and line, not sourced regex because # we want to make sure we can set breakpoints on call sites: @@ -411,8 +413,11 @@ def run_to_call_site_and_step(self, source_regex, func_name, start_pos, one_more if one_more_step_loc: thread.StepInto() frame_0 = thread.frame[0] - self.assertEqual(frame_0.line_entry.line, line_number(self.main_source, one_more_step_loc), - "Was able to step one more time") + self.assertEqual( + frame_0.line_entry.line, + line_number(self.main_source, one_more_step_loc), + "Was able to step one more time", + ) process.Kill() target.Clear() @@ -426,6 +431,8 @@ def virtual_inline_stepping(self): "In caller_trivial_inline_2", "caller_trivial_inline_2", 3 ) self.run_to_call_site_and_step( - "In caller_trivial_inline_3", "caller_trivial_inline_3", 4, "After caller_trivial_inline_3" + "In caller_trivial_inline_3", + "caller_trivial_inline_3", + 4, + "After caller_trivial_inline_3", ) - _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits