https://github.com/llvmbot created https://github.com/llvm/llvm-project/pull/150600
Backport f5c676d6d95dc63b8dcb43dd2e4dfc913a9c5a50 33396d71e9aef624670380e11348a11b8ff74246 Requested by: @labath >From 0aa93b0319e585504811e6f4492314d034d21c1f Mon Sep 17 00:00:00 2001 From: cmtice <cmt...@google.com> Date: Tue, 15 Jul 2025 08:19:10 -0700 Subject: [PATCH 1/2] [LLDB] Switch to using DIL as default implementation for 'frame var'. (#147887) (cherry picked from commit f5c676d6d95dc63b8dcb43dd2e4dfc913a9c5a50) --- lldb/source/Target/TargetProperties.td | 4 ++-- lldb/source/ValueObject/DILEval.cpp | 2 +- .../QualifiedId/TestFrameVarDILQualifiedId.py | 14 +++++++++++++ .../frame/var-dil/basics/QualifiedId/main.cpp | 21 ++++++++++++++++++- .../lldb-dap/evaluate/TestDAP_evaluate.py | 6 +++--- .../SymbolFile/DWARF/TestDedupWarnings.test | 2 +- llvm/docs/ReleaseNotes.md | 9 ++++++++ 7 files changed, 50 insertions(+), 8 deletions(-) diff --git a/lldb/source/Target/TargetProperties.td b/lldb/source/Target/TargetProperties.td index 4aa9e046d6077..656503bb8d228 100644 --- a/lldb/source/Target/TargetProperties.td +++ b/lldb/source/Target/TargetProperties.td @@ -5,8 +5,8 @@ let Definition = "target_experimental" in { Global, DefaultTrue, Desc<"If true, inject local variables explicitly into the expression text. This will fix symbol resolution when there are name collisions between ivars and local variables. But it can make expressions run much more slowly.">; def UseDIL : Property<"use-DIL", "Boolean">, - Global, DefaultFalse, - Desc<"If true, use the alternative DIL implementation for frame variable evaluation.">; + Global, DefaultTrue, + Desc<"If true, use the DIL implementation for frame variable evaluation.">; } let Definition = "target" in { diff --git a/lldb/source/ValueObject/DILEval.cpp b/lldb/source/ValueObject/DILEval.cpp index fd3f9f8724608..6f28434c646cd 100644 --- a/lldb/source/ValueObject/DILEval.cpp +++ b/lldb/source/ValueObject/DILEval.cpp @@ -303,7 +303,7 @@ Interpreter::Visit(const MemberOfNode *node) { } } - if (field_obj && field_obj->GetName() == node->GetFieldName()) { + if (field_obj) { if (m_use_dynamic != lldb::eNoDynamicValues) { lldb::ValueObjectSP dynamic_val_sp = field_obj->GetDynamicValue(m_use_dynamic); diff --git a/lldb/test/API/commands/frame/var-dil/basics/QualifiedId/TestFrameVarDILQualifiedId.py b/lldb/test/API/commands/frame/var-dil/basics/QualifiedId/TestFrameVarDILQualifiedId.py index b2ce9602e6a50..8c009aa182d07 100644 --- a/lldb/test/API/commands/frame/var-dil/basics/QualifiedId/TestFrameVarDILQualifiedId.py +++ b/lldb/test/API/commands/frame/var-dil/basics/QualifiedId/TestFrameVarDILQualifiedId.py @@ -29,3 +29,17 @@ def test_frame_var(self): self.expect_var_path("ns::i", value="1") self.expect_var_path("::ns::ns::i", value="2") self.expect_var_path("ns::ns::i", value="2") + + self.expect_var_path("foo", value="1") + self.expect_var_path("::(anonymous namespace)::foo", value="13") + self.expect_var_path("(anonymous namespace)::foo", value="13") + self.expect_var_path("ns1::(anonymous namespace)::foo", value="5") + self.expect_var_path( + "(anonymous namespace)::ns2::(anonymous namespace)::foo", + value="7", + ) + self.expect_var_path("::ns1::(anonymous namespace)::foo", value="5") + self.expect_var_path( + "::(anonymous namespace)::ns2::(anonymous namespace)::foo", + value="7", + ) diff --git a/lldb/test/API/commands/frame/var-dil/basics/QualifiedId/main.cpp b/lldb/test/API/commands/frame/var-dil/basics/QualifiedId/main.cpp index 8a5c47a6f364c..10ffa1e54a991 100644 --- a/lldb/test/API/commands/frame/var-dil/basics/QualifiedId/main.cpp +++ b/lldb/test/API/commands/frame/var-dil/basics/QualifiedId/main.cpp @@ -10,7 +10,26 @@ int i = 2; } // namespace ns +namespace { +int foo = 13; +} + +namespace ns1 { +namespace { +int foo = 5; +} +} // namespace ns1 + +namespace { +namespace ns2 { +namespace { +int foo = 7; +} +} // namespace ns2 +} // namespace + int main(int argc, char **argv) { + int foo = 1; - return 0; // Set a breakpoint here + return foo + ::foo + ns1::foo + ns2::foo; // Set a breakpoint here } diff --git a/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py b/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py index 0d2774b281710..20a75f4076e42 100644 --- a/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py +++ b/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py @@ -131,7 +131,7 @@ def run_test_evaluate_expressions( self.assertEvaluateFailure("a_function(1)") self.assertEvaluateFailure("var2 + struct1.foo") self.assertEvaluateFailure("foo_func") - self.assertEvaluateFailure("foo_var") + self.assertEvaluate("foo_var", "44") # Expressions at breakpoint 2, which is an anonymous block self.continue_to_breakpoint(breakpoint_2) @@ -169,7 +169,7 @@ def run_test_evaluate_expressions( self.assertEvaluateFailure("a_function(1)") self.assertEvaluateFailure("var2 + struct1.foo") self.assertEvaluateFailure("foo_func") - self.assertEvaluateFailure("foo_var") + self.assertEvaluate("foo_var", "44") # Expressions at breakpoint 3, which is inside a_function self.continue_to_breakpoint(breakpoint_3) @@ -195,7 +195,7 @@ def run_test_evaluate_expressions( self.assertEvaluateFailure("a_function(1)") self.assertEvaluateFailure("list + 1") self.assertEvaluateFailure("foo_func") - self.assertEvaluateFailure("foo_var") + self.assertEvaluate("foo_var", "44") # Now we check that values are updated after stepping self.continue_to_breakpoint(breakpoint_4) diff --git a/lldb/test/Shell/SymbolFile/DWARF/TestDedupWarnings.test b/lldb/test/Shell/SymbolFile/DWARF/TestDedupWarnings.test index d4fcf78d01b81..c29b51219d191 100644 --- a/lldb/test/Shell/SymbolFile/DWARF/TestDedupWarnings.test +++ b/lldb/test/Shell/SymbolFile/DWARF/TestDedupWarnings.test @@ -15,7 +15,7 @@ # RUN: %clang_host -fmodules -Xclang -fmodules-cache-path=%t/cache -I%t -g -gmodules %t/b.m -o %t/b.o -c # RUN: %clang_host %t/a.o %t/b.o -o %t/a.out # RUN: rm -rf %t/cache -# RUN: %lldb %t/a.out -o "b main" -o run -o "p a" -o "p b" -o q 2>&1 | FileCheck %s +# RUN: %lldb %t/a.out -o "b main" -o run -o "expr a" -o "expr b" -o q 2>&1 | FileCheck %s # CHECK: {{[ab]}}.o{{.*}}/cache/{{.*}}/C-{{.*}}.pcm' does not exist # CHECK-NOT: /cache/{{.*}}/C-{.*}.pcm' does not exist # CHECK: {{[ab]}}.o{{.*}}/cache/{{.*}}/C-{{.*}}.pcm' does not exist diff --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md index bafd7ba38aaae..63ef9eaf4c4e0 100644 --- a/llvm/docs/ReleaseNotes.md +++ b/llvm/docs/ReleaseNotes.md @@ -311,6 +311,14 @@ Changes to LLDB stop reason = SIGSEGV: sent by tkill system call (sender pid=649752, uid=2667987) ``` * ELF Cores can now have their siginfo structures inspected using `thread siginfo`. +* LLDB now uses + [DIL](https://discourse.llvm.org/t/rfc-data-inspection-language/69893) as the + default implementation for 'frame variable'. This should not change the + behavior of 'frame variable' at all, at this time. To revert to using the + old implementation use + ``` + settings set target.experimental.use-DIL false + ``` * Disassembly of unknown instructions now produces `<unknown>` instead of nothing at all * Changed the format of opcode bytes to match llvm-objdump when disassembling @@ -318,6 +326,7 @@ Changes to LLDB * LLDB added native support for the Model Context Protocol (MCP). An MCP server can be started with the `protocol-server start MCP` command. + ### Changes to lldb-dap * Breakpoints can now be set for specific columns within a line. >From dc946d4d385b888d4ec9b8c7a7d4bd771ee2906c Mon Sep 17 00:00:00 2001 From: cmtice <cmt...@google.com> Date: Wed, 16 Jul 2025 08:29:33 -0700 Subject: [PATCH 2/2] [LLDB] Update release note about DIL as requested. (#149117) A post-commit review on PR #147887 requested a minor update to the formatting of the LLDB DIL implementation release note. (cherry picked from commit 33396d71e9aef624670380e11348a11b8ff74246) --- llvm/docs/ReleaseNotes.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/llvm/docs/ReleaseNotes.md b/llvm/docs/ReleaseNotes.md index 63ef9eaf4c4e0..9a86179eed7c8 100644 --- a/llvm/docs/ReleaseNotes.md +++ b/llvm/docs/ReleaseNotes.md @@ -315,10 +315,7 @@ Changes to LLDB [DIL](https://discourse.llvm.org/t/rfc-data-inspection-language/69893) as the default implementation for 'frame variable'. This should not change the behavior of 'frame variable' at all, at this time. To revert to using the - old implementation use - ``` - settings set target.experimental.use-DIL false - ``` + old implementation use: `settings set target.experimental.use-DIL false`. * Disassembly of unknown instructions now produces `<unknown>` instead of nothing at all * Changed the format of opcode bytes to match llvm-objdump when disassembling _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits