[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