[Lldb-commits] [lldb] Fix stepping away from the bottom-most frame of a virtual inlined call stack. (PR #114337)
via lldb-commits
lldb-commits at lists.llvm.org
Wed Oct 30 18:02:31 PDT 2024
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 <jingham at apple.com>
Date: Wed, 30 Oct 2024 17:18:39 -0700
Subject: [PATCH 1/3] 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 <jingham at apple.com>
Date: Wed, 30 Oct 2024 18:01:20 -0700
Subject: [PATCH 2/3] 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",
)
-
>From 00a1c4bdf7afb92baa2f9630586b486295bf88de Mon Sep 17 00:00:00 2001
From: Jim Ingham <jingham at apple.com>
Date: Wed, 30 Oct 2024 18:02:13 -0700
Subject: [PATCH 3/3] clang-format
---
lldb/test/API/functionalities/inline-stepping/calling.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lldb/test/API/functionalities/inline-stepping/calling.cpp b/lldb/test/API/functionalities/inline-stepping/calling.cpp
index 7ed88a872c4eba..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; // After caller_trivial_inline_3
+ inline_value += 1; // After caller_trivial_inline_3
}
void caller_trivial_inline_3() {
More information about the lldb-commits
mailing list