Author: Adrian Prantl Date: 2023-11-08T09:54:41-08:00 New Revision: 767ce07c2d4c312188623441979d620b9708ee99
URL: https://github.com/llvm/llvm-project/commit/767ce07c2d4c312188623441979d620b9708ee99 DIFF: https://github.com/llvm/llvm-project/commit/767ce07c2d4c312188623441979d620b9708ee99.diff LOG: 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. Added: Modified: lldb/source/Core/ValueObject.cpp Removed: ################################################################################ diff --git a/lldb/source/Core/ValueObject.cpp b/lldb/source/Core/ValueObject.cpp index bdb1bef633d8fb1..a7f7ee64282d891 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; _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits