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..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): + 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 +410,14 @@ 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 +430,9 @@ 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..ba71c25a3c648f 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() {