[Lldb-commits] [lldb] [lldb][DWARF] Don't try to compute address range information of forward declarations (PR #144059)

via lldb-commits lldb-commits at lists.llvm.org
Fri Jun 13 05:15:32 PDT 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: Michael Buch (Michael137)

<details>
<summary>Changes</summary>

This fixes the error reported in
https://github.com/llvm/llvm-project/pull/144037.

When computing the aranges table of a CU, LLDB would currently visit all `DW_TAG_subprogram` DIEs and check their `DW_AT_low_pc`/`DW_AT_high_pc`. If those don't exist it would error out and spam the console. Some subprograms (particularly forward declarations) don't have low/high pc attributes, so it's not really an "error". We should just ignore those DIEs.

---
Full diff: https://github.com/llvm/llvm-project/pull/144059.diff


2 Files Affected:

- (modified) lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp (+2-1) 
- (added) lldb/test/Shell/SymbolFile/DWARF/forward-declaration-address-ranges.test (+25) 


``````````diff
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp
index 5196ce89a2c13..d9deffbe7f8b5 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp
@@ -611,7 +611,8 @@ void DWARFDebugInfoEntry::BuildFunctionAddressRangeTable(
     DWARFUnit *cu, DWARFDebugAranges *debug_aranges) const {
   Log *log = GetLog(DWARFLog::DebugInfo);
   if (m_tag) {
-    if (m_tag == DW_TAG_subprogram) {
+    if (m_tag == DW_TAG_subprogram &&
+        !GetAttributeValueAsOptionalUnsigned(cu, DW_AT_declaration)) {
       if (llvm::Expected<llvm::DWARFAddressRangesVector> ranges =
               GetAttributeAddressRanges(cu, /*check_hi_lo_pc=*/true)) {
         for (const auto &r : *ranges)
diff --git a/lldb/test/Shell/SymbolFile/DWARF/forward-declaration-address-ranges.test b/lldb/test/Shell/SymbolFile/DWARF/forward-declaration-address-ranges.test
new file mode 100644
index 0000000000000..011e2080a8101
--- /dev/null
+++ b/lldb/test/Shell/SymbolFile/DWARF/forward-declaration-address-ranges.test
@@ -0,0 +1,25 @@
+# Test that we don't try to determine address range
+# information of forward declaration DIEs which have
+# no DW_AT_low_pc/DW_AT_high_pc in DWARF.
+
+# RUN: split-file %s %t
+# RUN: %clang_host -c -g -gdwarf %t/main.cpp -o %t.o
+# RUN: %lldb -x -b -s %t/commands.input %t.o -o exit 2>&1 \
+# RUN:       | FileCheck %s
+
+#--- main.cpp
+
+struct Foo {
+  void func() {}
+} foo;
+
+void baz() {
+  foo.func();
+}
+
+#--- commands.input
+
+log enable -v dwarf info
+target modules lookup -n func
+
+# CHECK-NOT: DIE has no address range information

``````````

</details>


https://github.com/llvm/llvm-project/pull/144059


More information about the lldb-commits mailing list