kastiglione updated this revision to Diff 362229. kastiglione added a comment.
Re-simplify following discussion with Adrian and Jim. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D106171/new/ https://reviews.llvm.org/D106171 Files: lldb/source/Target/ThreadPlanStack.cpp Index: lldb/source/Target/ThreadPlanStack.cpp =================================================================== --- lldb/source/Target/ThreadPlanStack.cpp +++ lldb/source/Target/ThreadPlanStack.cpp @@ -142,7 +142,10 @@ lldb::ThreadPlanSP ThreadPlanStack::PopPlan() { assert(m_plans.size() > 1 && "Can't pop the base thread plan"); - lldb::ThreadPlanSP plan_sp = std::move(m_plans.back()); + // Note that `std::move` on `m_plans` elements can break its non-null + // invariant - if also calling functions (such as `WillPop`) that can't + // guarantee `m_plans` is not accessed in its inconsistent state. + lldb::ThreadPlanSP plan_sp = m_plans.back(); m_completed_plans.push_back(plan_sp); plan_sp->WillPop(); m_plans.pop_back(); @@ -152,7 +155,10 @@ lldb::ThreadPlanSP ThreadPlanStack::DiscardPlan() { assert(m_plans.size() > 1 && "Can't discard the base thread plan"); - lldb::ThreadPlanSP plan_sp = std::move(m_plans.back()); + // Note that `std::move` on `m_plans` elements can break its non-null + // invariant - if also calling functions (such as `WillPop`) that can't + // guarantee `m_plans` is not accessed in its inconsistent state. + lldb::ThreadPlanSP plan_sp = m_plans.back(); m_discarded_plans.push_back(plan_sp); plan_sp->WillPop(); m_plans.pop_back();
Index: lldb/source/Target/ThreadPlanStack.cpp =================================================================== --- lldb/source/Target/ThreadPlanStack.cpp +++ lldb/source/Target/ThreadPlanStack.cpp @@ -142,7 +142,10 @@ lldb::ThreadPlanSP ThreadPlanStack::PopPlan() { assert(m_plans.size() > 1 && "Can't pop the base thread plan"); - lldb::ThreadPlanSP plan_sp = std::move(m_plans.back()); + // Note that `std::move` on `m_plans` elements can break its non-null + // invariant - if also calling functions (such as `WillPop`) that can't + // guarantee `m_plans` is not accessed in its inconsistent state. + lldb::ThreadPlanSP plan_sp = m_plans.back(); m_completed_plans.push_back(plan_sp); plan_sp->WillPop(); m_plans.pop_back(); @@ -152,7 +155,10 @@ lldb::ThreadPlanSP ThreadPlanStack::DiscardPlan() { assert(m_plans.size() > 1 && "Can't discard the base thread plan"); - lldb::ThreadPlanSP plan_sp = std::move(m_plans.back()); + // Note that `std::move` on `m_plans` elements can break its non-null + // invariant - if also calling functions (such as `WillPop`) that can't + // guarantee `m_plans` is not accessed in its inconsistent state. + lldb::ThreadPlanSP plan_sp = m_plans.back(); m_discarded_plans.push_back(plan_sp); plan_sp->WillPop(); m_plans.pop_back();
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits