[Lldb-commits] [lldb] 1e81b67 - [lldb] FormatManager::GetPossibleMatches assumes all ValueObjects have targets. (#93880)
via lldb-commits
lldb-commits at lists.llvm.org
Fri May 31 10:43:08 PDT 2024
Author: jimingham
Date: 2024-05-31T10:43:05-07:00
New Revision: 1e81b67925fdd77a3d65ba2a7f652d1e840512f4
URL: https://github.com/llvm/llvm-project/commit/1e81b67925fdd77a3d65ba2a7f652d1e840512f4
DIFF: https://github.com/llvm/llvm-project/commit/1e81b67925fdd77a3d65ba2a7f652d1e840512f4.diff
LOG: [lldb] FormatManager::GetPossibleMatches assumes all ValueObjects have targets. (#93880)
But one made in a situation where that's impossible might only have an
error, and no symbol context, so that's not necessarily true. Check for
the target's validity before using it.
Fixes issue #93313
Added:
Modified:
lldb/source/DataFormatters/FormatManager.cpp
lldb/test/API/python_api/run_locker/TestRunLocker.py
Removed:
################################################################################
diff --git a/lldb/source/DataFormatters/FormatManager.cpp b/lldb/source/DataFormatters/FormatManager.cpp
index d7ba5b4b70c94..60765952760a2 100644
--- a/lldb/source/DataFormatters/FormatManager.cpp
+++ b/lldb/source/DataFormatters/FormatManager.cpp
@@ -176,8 +176,14 @@ void FormatManager::GetPossibleMatches(
FormattersMatchCandidate::Flags current_flags, bool root_level) {
compiler_type = compiler_type.GetTypeForFormatters();
ConstString type_name(compiler_type.GetTypeName());
+ // A ValueObject that couldn't be made correctly won't necessarily have a
+ // target. We aren't going to find a formatter in this case anyway, so we
+ // should just exit.
+ TargetSP target_sp = valobj.GetTargetSP();
+ if (!target_sp)
+ return;
ScriptInterpreter *script_interpreter =
- valobj.GetTargetSP()->GetDebugger().GetScriptInterpreter();
+ target_sp->GetDebugger().GetScriptInterpreter();
if (valobj.GetBitfieldBitSize() > 0) {
StreamString sstring;
sstring.Printf("%s:%d", type_name.AsCString(), valobj.GetBitfieldBitSize());
diff --git a/lldb/test/API/python_api/run_locker/TestRunLocker.py b/lldb/test/API/python_api/run_locker/TestRunLocker.py
index 4e0dd26bff70d..d525bbf6b406f 100644
--- a/lldb/test/API/python_api/run_locker/TestRunLocker.py
+++ b/lldb/test/API/python_api/run_locker/TestRunLocker.py
@@ -85,6 +85,13 @@ def runlocker_test(self, stop_at_entry):
# you aren't supposed to do while running, and that we get some
# actual error:
val = target.EvaluateExpression("SomethingToCall()")
+ # There was a bug [#93313] in the printing that would cause repr to crash, so I'm
+ # testing that separately.
+ self.assertIn(
+ "can't evaluate expressions when the process is running",
+ repr(val),
+ "repr works"
+ )
error = val.GetError()
self.assertTrue(error.Fail(), "Failed to run expression")
self.assertIn(
More information about the lldb-commits
mailing list