[Lldb-commits] [lldb] [lldb/DWARF] Resolve type unit references in llvm DWARFDIE compatibility wrappers (PR #126902)
Pavel Labath via lldb-commits
lldb-commits at lists.llvm.org
Wed Feb 12 04:39:32 PST 2025
https://github.com/labath created https://github.com/llvm/llvm-project/pull/126902
The llvm versions of these functions do that, so we must to so as well. Practically this meant that were were unable to correctly un-simplify the names of some types when using type units, which resulted in type lookup errors.
>From 2c8e19be624a2ce6687f92840a2e494075024754 Mon Sep 17 00:00:00 2001
From: Pavel Labath <pavel at labath.sk>
Date: Wed, 12 Feb 2025 13:34:03 +0100
Subject: [PATCH] [lldb/DWARF] Resolve type unit references in llvm DWARFDIE
compatibility wrappers
The llvm versions of these functions do that, so we must to so as well.
Practically this meant that were were unable to correctly un-simplify
the names of some types when using type units, which resulted in type
lookup errors.
---
.../Plugins/SymbolFile/DWARF/DWARFDIE.cpp | 4 ++--
.../DWARF/x86/simplified-template-names.cpp | 20 ++++++++++++++++---
2 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp
index 1e2564cb22f25..0db230d0a8b56 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp
@@ -622,12 +622,12 @@ std::optional<uint64_t> DWARFDIE::getLanguage() const {
}
DWARFDIE DWARFDIE::resolveReferencedType(dw_attr_t attr) const {
- return GetReferencedDIE(attr);
+ return GetReferencedDIE(attr).resolveTypeUnitReference();
}
DWARFDIE DWARFDIE::resolveReferencedType(DWARFFormValue v) const {
if (IsValid())
- return v.Reference();
+ return v.Reference().resolveTypeUnitReference();
return {};
}
diff --git a/lldb/test/Shell/SymbolFile/DWARF/x86/simplified-template-names.cpp b/lldb/test/Shell/SymbolFile/DWARF/x86/simplified-template-names.cpp
index 328d6d2e16d59..ad5dfb6a6dded 100644
--- a/lldb/test/Shell/SymbolFile/DWARF/x86/simplified-template-names.cpp
+++ b/lldb/test/Shell/SymbolFile/DWARF/x86/simplified-template-names.cpp
@@ -11,12 +11,23 @@
// Test that we following DW_AT_signature correctly. If not, lldb might confuse the types of v1 and v2.
// RUN: %clangxx --target=x86_64-pc-linux -g -gsimple-template-names -fdebug-types-section %s -c -o %t2.o
// RUN: ld.lld %t2.o -o %t2
-// RUN: %lldb %t2 -o "target variable v1 v2" -o exit | FileCheck %s --check-prefix=TYPE
+// RUN: %lldb %t2 -o "target variable v1 v2" \
+// RUN: -o "type lookup t2<outer_struct1>" -o "type lookup t2<outer_struct2>" \
+// RUN: -o exit | FileCheck %s --check-prefix=TYPE
// LOG: unique name: t3<t2<int> >::t4
-// TYPE: (t2<outer_struct1::t1<int> >) v1 = {}
-// TYPE-NEXT: (t2<outer_struct2::t1<int> >) v2 = {}
+// TYPE-LABEL: target variable v1 v2
+// TYPE: (t2<outer_struct1::t1<int> >) v1 = {}
+// TYPE: (t2<outer_struct2::t1<int> >) v2 = {}
+
+// TYPE-LABEL: type lookup t2<outer_struct1>
+// TYPE: template<> struct t2<outer_struct1> {
+// TYPE-NEXT: }
+
+// TYPE-LABEL: type lookup t2<outer_struct2>
+// TYPE: template<> struct t2<outer_struct2> {
+// TYPE-NEXT: }
struct outer_struct1 {
template <typename> struct t1 {};
@@ -30,6 +41,9 @@ template <typename> struct t2 {};
t2<outer_struct1::t1<int>> v1;
t2<outer_struct2::t1<int>> v2;
+t2<outer_struct1> v1_1;
+t2<outer_struct2> v1_2;
+
template <typename> struct t3 {
struct t4 {};
};
More information about the lldb-commits
mailing list