https://github.com/kuilpd updated https://github.com/llvm/llvm-project/pull/222386
>From 7c3884e057b7a768784e421832473bb0d9dae86b Mon Sep 17 00:00:00 2001 From: Ilia Kuklin <[email protected]> Date: Tue, 8 Sep 2026 21:31:16 +0500 Subject: [PATCH] [lldb] Fix DIL losing StackFrame context after casting to pointer --- lldb/source/ValueObject/DILEval.cpp | 8 +++--- .../TestCreateValueFromExpression.py | 25 ++++++++++++------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/lldb/source/ValueObject/DILEval.cpp b/lldb/source/ValueObject/DILEval.cpp index 627d30cae9bec..10dcdaf08fc65 100644 --- a/lldb/source/ValueObject/DILEval.cpp +++ b/lldb/source/ValueObject/DILEval.cpp @@ -2057,11 +2057,9 @@ llvm::Expected<lldb::ValueObjectSP> Interpreter::Visit(const CastNode &node) { ? operand->GetLoadAddress() : (op_type.IsSigned() ? operand->GetValueAsSigned(0) : operand->GetValueAsUnsigned(0)); - llvm::StringRef name = "result"; - ExecutionContext exe_ctx(m_target.get(), false); - result = ValueObject::CreateValueObjectFromAddress(name, addr, exe_ctx, - target_type, - /* do_deref */ false); + result = ValueObject::CreateValueObjectFromAddress( + "result", addr, m_stack_frame, target_type, + /* do_deref */ false); break; } case CastKind::eNone: { diff --git a/lldb/test/API/commands/frame/var-dil/expr/CreateValueFromExpression/TestCreateValueFromExpression.py b/lldb/test/API/commands/frame/var-dil/expr/CreateValueFromExpression/TestCreateValueFromExpression.py index f105adc87ac14..f328c203869ae 100644 --- a/lldb/test/API/commands/frame/var-dil/expr/CreateValueFromExpression/TestCreateValueFromExpression.py +++ b/lldb/test/API/commands/frame/var-dil/expr/CreateValueFromExpression/TestCreateValueFromExpression.py @@ -33,17 +33,21 @@ def test_formatter(self): self.assertEqual(v1.GetValue(), "1") v2 = i.CreateValueFromExpression("v2", "static_cast<double>(i) + 2.5") self.assertEqual(v2.GetValue(), "2.5") + v3 = i.CreateValueFromExpression("v3", "(int *) 0") + self.assertEqual(v3.GetTypeName(), "int *") + v4 = v3.CreateValueFromExpression("v4", "i + 4") + self.assertEqual(v4.GetValue(), "4") expr_options = lldb.SBExpressionOptions() - v3 = i.CreateValueFromExpression("v3", "i + 3", expr_options) - self.assertEqual(v3.GetValue(), "3") + v5 = i.CreateValueFromExpression("v5", "i + 5", expr_options) + self.assertEqual(v5.GetValue(), "5") self.runCmd( "settings set target.experimental.use-DIL-for-creating-values false" ) - v4 = i.CreateValueFromExpression("v4", "i + 4") - self.assertEqual(v4.GetValue(), "4") + v6 = i.CreateValueFromExpression("v6", "i + 6") + self.assertEqual(v6.GetValue(), "6") expr_options.SetTryDILFirst(True) - v5 = i.CreateValueFromExpression("v5", "i + 5", expr_options) - self.assertEqual(v5.GetValue(), "5") + v7 = i.CreateValueFromExpression("v7", "i + 7", expr_options) + self.assertEqual(v7.GetValue(), "7") with open(log_file, "r") as f: log = f.read() @@ -53,9 +57,12 @@ def test_formatter(self): # Check that if DIL cannot evaluate the expression, it falls back to # full expression evaluation self.assertGreater(log.find("v2 = 2.5 (evaluated by: UserExpression)"), 0) + # Check that values can be created from values created by DIL + self.assertGreater(log.find("0000 (evaluated by: DIL)"), 0) + self.assertGreater(log.find("v4 = 4 (evaluated by: DIL)"), 0) # Check that trying DIL can be disabled through expression options parameter - self.assertGreater(log.find("v3 = 3 (evaluated by: UserExpression)"), 0) + self.assertGreater(log.find("v5 = 5 (evaluated by: UserExpression)"), 0) # Check that using DIL was disabled after disabling the lldb setting - self.assertGreater(log.find("v4 = 4 (evaluated by: UserExpression)"), 0) + self.assertGreater(log.find("v6 = 6 (evaluated by: UserExpression)"), 0) # Check that trying DIL can be enabled through expression options parameter - self.assertGreater(log.find("v5 = 5 (evaluated by: DIL)"), 0) + self.assertGreater(log.find("v7 = 7 (evaluated by: DIL)"), 0) _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
