[llvm-branch-commits] [lldb] [lldb] Fix DIL losing StackFrame context after casting to pointer (PR #222386)
Ilia Kuklin via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sat Sep 12 06:19:41 PDT 2026
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 <ikuklin at accesssoftek.com>
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)
More information about the llvm-branch-commits
mailing list