Changes

Summary

  1. [lldb] Avoid moving ThreadPlanSP from plans vector (details)
Commit 41d0b20cc90f2aea25b4306f6c8f6c258ca3d377 by davelee.com
[lldb] Avoid moving ThreadPlanSP from plans vector

Change `ThreadPlanStack::PopPlan` and `::DiscardPlan` to not do the following:

1. Move the last plan, leaving a moved `ThreadPlanSP` in the plans vector
2. Operate on the last plan
3. Pop the last plan off the plans vector

This leaves a period of time where the last element in the plans vector has been moved. I am not sure what, if any, guarantees there are when doing this, but it seems like it would/could leave a null `ThreadPlanSP` in the container. There are asserts in place to prevent empty/null `ThreadPlanSP` instances from being pushed on to the stack, and so this could break that invariant during multithreaded access to the thread plan stack.

An open question is whether this use of `std::move` was the result of a measure performance problem.

Differential Revision: https://reviews.llvm.org/D106171
The file was modifiedlldb/include/lldb/Target/ThreadPlanCallFunction.h
The file was modifiedlldb/source/Target/ThreadPlanCallUserExpression.cpp
The file was modifiedlldb/source/Target/ThreadPlanStack.cpp
The file was modifiedlldb/include/lldb/Target/ThreadPlan.h
The file was modifiedlldb/source/Target/ThreadPlanStepOverBreakpoint.cpp
The file was modifiedlldb/include/lldb/Target/ThreadPlanStepOverBreakpoint.h
The file was modifiedlldb/source/Target/ThreadPlan.cpp
The file was modifiedlldb/include/lldb/Target/ThreadPlanCallUserExpression.h
The file was modifiedlldb/source/Target/ThreadPlanCallFunction.cpp