[lldb] Lower GetRealStopInfo into ThreadPlanCallFunction (NFC)
`GetRealStopInfo` has only one call site, and in that call site a reference to the
concrete thread plan is available (`ThreadPlanCallUserExpression`), from which
`GetRealStopInfo` can be called.
Differential Revision: https://reviews.llvm.org/D96687
GitOrigin-RevId: 2a2464eb7651dc89290e9e3bf6928c99453bed99
diff --git a/include/lldb/Target/ThreadPlan.h b/include/lldb/Target/ThreadPlan.h
index 74d49ce..caa6c5f 100644
--- a/include/lldb/Target/ThreadPlan.h
+++ b/include/lldb/Target/ThreadPlan.h
@@ -431,15 +431,6 @@
m_tracer_sp->Log();
}
- // Some thread plans hide away the actual stop info which caused any
- // particular stop. For instance the ThreadPlanCallFunction restores the
- // original stop reason so that stopping and calling a few functions won't
- // lose the history of the run. This call can be implemented to get you back
- // to the real stop info.
- virtual lldb::StopInfoSP GetRealStopInfo() {
- return GetThread().GetStopInfo();
- }
-
// If the completion of the thread plan stepped out of a function, the return
// value of the function might have been captured by the thread plan
// (currently only ThreadPlanStepOut does this.) If so, the ReturnValueObject
diff --git a/include/lldb/Target/ThreadPlanCallFunction.h b/include/lldb/Target/ThreadPlanCallFunction.h
index 8874c6c..24c5736 100644
--- a/include/lldb/Target/ThreadPlanCallFunction.h
+++ b/include/lldb/Target/ThreadPlanCallFunction.h
@@ -81,7 +81,7 @@
// stop reason. But if something bad goes wrong, it is nice to be able to
// tell the user what really happened.
- lldb::StopInfoSP GetRealStopInfo() override {
+ virtual lldb::StopInfoSP GetRealStopInfo() {
if (m_real_stop_info_sp)
return m_real_stop_info_sp;
else
diff --git a/source/Expression/LLVMUserExpression.cpp b/source/Expression/LLVMUserExpression.cpp
index 187b427..527dff8 100644
--- a/source/Expression/LLVMUserExpression.cpp
+++ b/source/Expression/LLVMUserExpression.cpp
@@ -188,9 +188,8 @@
execution_result == lldb::eExpressionHitBreakpoint) {
const char *error_desc = nullptr;
- if (call_plan_sp) {
- lldb::StopInfoSP real_stop_info_sp = call_plan_sp->GetRealStopInfo();
- if (real_stop_info_sp)
+ if (user_expression_plan) {
+ if (auto real_stop_info_sp = user_expression_plan->GetRealStopInfo())
error_desc = real_stop_info_sp->GetDescription();
}
if (error_desc)