forked from OSchip/llvm-project
Fixed a dangling pointer bug associated with the
result variable on a "finish" statement. The ownership of the result value was not being properly assigned to the newly-created persistent result variable; now it is. llvm-svn: 147587
This commit is contained in:
parent
78d87d3b4b
commit
31a8d051dd
|
@ -98,6 +98,13 @@ ValueObjectConstResult::ValueObjectConstResult
|
|||
m_impl(this, address)
|
||||
{
|
||||
m_data = data;
|
||||
|
||||
if (!m_data.GetSharedDataBuffer())
|
||||
{
|
||||
DataBufferSP shared_data_buffer(new DataBufferHeap(data.GetDataStart(), data.GetByteSize()));
|
||||
m_data.SetData(shared_data_buffer);
|
||||
}
|
||||
|
||||
m_value.GetScalar() = (uintptr_t)m_data.GetDataStart();
|
||||
m_value.SetValueType(Value::eValueTypeHostAddress);
|
||||
m_value.SetContext(Value::eContextTypeClangType, clang_type);
|
||||
|
|
|
@ -156,6 +156,7 @@ ABI::GetReturnValueObject (Thread &thread,
|
|||
// we don't do anything with these for now
|
||||
break;
|
||||
case Value::eValueTypeScalar:
|
||||
clang_expr_variable_sp->m_flags |= ClangExpressionVariable::EVIsFreezeDried;
|
||||
clang_expr_variable_sp->m_flags |= ClangExpressionVariable::EVIsLLDBAllocated;
|
||||
clang_expr_variable_sp->m_flags |= ClangExpressionVariable::EVNeedsAllocation;
|
||||
break;
|
||||
|
@ -164,8 +165,8 @@ ABI::GetReturnValueObject (Thread &thread,
|
|||
clang_expr_variable_sp->m_flags |= ClangExpressionVariable::EVIsProgramReference;
|
||||
break;
|
||||
}
|
||||
|
||||
return_valobj_sp = clang_expr_variable_sp->GetValueObject();
|
||||
|
||||
}
|
||||
return return_valobj_sp;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue