Skip to content

Commit

Permalink
Unify the ExecutionContextScope computation in Materializer.
Browse files Browse the repository at this point in the history
This is an NFC cleanup for Clang, and a bugfix for the Swift
branch. In swift-lldb one target may have multiple scratch
TypeSystems, so it is important to pick the one that belongs to the
current frame, rather than the one for the current target.

<rdar://problem/65001402>
  • Loading branch information
adrian-prantl committed Jul 8, 2020
1 parent 1bfdf7c commit 3728133
Showing 1 changed file with 12 additions and 5 deletions.
17 changes: 12 additions & 5 deletions lldb/source/Expression/Materializer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -785,7 +785,9 @@ class EntityResultVariable : public Materializer::Entity {

const lldb::addr_t load_addr = process_address + m_offset;

ExecutionContextScope *exe_scope = map.GetBestExecutionContextScope();
ExecutionContextScope *exe_scope = frame_sp.get();
if (!exe_scope)
exe_scope = map.GetBestExecutionContextScope();

llvm::Optional<uint64_t> byte_size = m_type.GetByteSize(exe_scope);
if (!byte_size) {
Expand Down Expand Up @@ -835,7 +837,9 @@ class EntityResultVariable : public Materializer::Entity {
lldb::addr_t frame_bottom, Status &err) override {
err.Clear();

ExecutionContextScope *exe_scope = map.GetBestExecutionContextScope();
ExecutionContextScope *exe_scope = frame_sp.get();
if (!exe_scope)
exe_scope = map.GetBestExecutionContextScope();

if (!exe_scope) {
err.SetErrorString("Couldn't dematerialize a result variable: invalid "
Expand Down Expand Up @@ -1061,7 +1065,9 @@ class EntitySymbol : public Materializer::Entity {

const Address sym_address = m_symbol.GetAddress();

ExecutionContextScope *exe_scope = map.GetBestExecutionContextScope();
ExecutionContextScope *exe_scope = frame_sp.get();
if (!exe_scope)
exe_scope = map.GetBestExecutionContextScope();

lldb::TargetSP target_sp;

Expand Down Expand Up @@ -1342,7 +1348,6 @@ Materializer::DematerializerSP
Materializer::Materialize(lldb::StackFrameSP &frame_sp, IRMemoryMap &map,
lldb::addr_t process_address, Status &error) {
ExecutionContextScope *exe_scope = frame_sp.get();

if (!exe_scope)
exe_scope = map.GetBestExecutionContextScope();

Expand Down Expand Up @@ -1393,7 +1398,9 @@ void Materializer::Dematerializer::Dematerialize(Status &error,
if (thread_sp)
frame_sp = thread_sp->GetFrameWithStackID(m_stack_id);

ExecutionContextScope *exe_scope = m_map->GetBestExecutionContextScope();
ExecutionContextScope *exe_scope = frame_sp.get();
if (!exe_scope)
exe_scope = m_map->GetBestExecutionContextScope();

if (!IsValid()) {
error.SetErrorToGenericError();
Expand Down

0 comments on commit 3728133

Please sign in to comment.