diff options
author | Adrian Prantl <adrian-prantl@users.noreply.github.com> | 2023-11-08 09:54:41 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-08 09:54:41 -0800 |
commit | 767ce07c2d4c312188623441979d620b9708ee99 (patch) | |
tree | ccc34f77ade48ef9ed5f3625aa39f9010e6950a9 | |
parent | 5ef446790f4d9820999bfb2dd5f180c3e7cfdcb6 (diff) |
Simplify ValueObject::GetQualifiedRepresentationIfAvailable(). (#71559)
I received a couple of nullptr-deref crash reports with no line numbers
in this function. The way the function was written it was a bit
diffucult to keep track of when result_sp could be null, so this patch
simplifies the function to make it more obvious when a nullptr can be
contained in the variable.
-rw-r--r-- | lldb/source/Core/ValueObject.cpp | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/lldb/source/Core/ValueObject.cpp b/lldb/source/Core/ValueObject.cpp index bdb1bef633d8..a7f7ee64282d 100644 --- a/lldb/source/Core/ValueObject.cpp +++ b/lldb/source/Core/ValueObject.cpp @@ -2594,34 +2594,30 @@ ValueObjectSP ValueObject::CreateConstantValue(ConstString name) { ValueObjectSP ValueObject::GetQualifiedRepresentationIfAvailable( lldb::DynamicValueType dynValue, bool synthValue) { - ValueObjectSP result_sp(GetSP()); - + ValueObjectSP result_sp; switch (dynValue) { case lldb::eDynamicCanRunTarget: case lldb::eDynamicDontRunTarget: { - if (!result_sp->IsDynamic()) { - if (result_sp->GetDynamicValue(dynValue)) - result_sp = result_sp->GetDynamicValue(dynValue); - } + if (!IsDynamic()) + result_sp = GetDynamicValue(dynValue); } break; case lldb::eNoDynamicValues: { - if (result_sp->IsDynamic()) { - if (result_sp->GetStaticValue()) - result_sp = result_sp->GetStaticValue(); - } + if (IsDynamic()) + result_sp = GetStaticValue(); } break; } + if (!result_sp) + result_sp = GetSP(); + assert(result_sp); - if (synthValue) { - if (!result_sp->IsSynthetic()) { - if (result_sp->GetSyntheticValue()) - result_sp = result_sp->GetSyntheticValue(); - } - } else { - if (result_sp->IsSynthetic()) { - if (result_sp->GetNonSyntheticValue()) - result_sp = result_sp->GetNonSyntheticValue(); - } + bool is_synthetic = result_sp->IsSynthetic(); + if (synthValue && !is_synthetic) { + if (auto synth_sp = result_sp->GetSyntheticValue()) + return synth_sp; + } + if (!synthValue && is_synthetic) { + if (auto non_synth_sp = result_sp->GetNonSyntheticValue()) + return non_synth_sp; } return result_sp; |