[Lldb-commits] [lldb] [lldb/DWARF] Resolve type unit references in llvm DWARFDIE compatibility wrappers (PR #126902)
via lldb-commits
lldb-commits at lists.llvm.org
Wed Feb 12 04:40:09 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: Pavel Labath (labath)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/126902.diff
2 Files Affected:
- (modified) lldb/source/Plugins/SymbolFile/DWARF/DWARFDIE.cpp (+2-2)
- (modified) lldb/test/Shell/SymbolFile/DWARF/x86/simplified-template-names.cpp (+17-3)
``````````diff
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 {};
};
``````````
</details>
https://github.com/llvm/llvm-project/pull/126902
More information about the lldb-commits
mailing list