Skip to content

[lldb/DWARF] Resolve type unit references in llvm DWARFDIE compatibility wrappers #126902

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 13, 2025

Conversation

labath
Copy link
Collaborator

@labath labath commented Feb 12, 2025

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.

…ity 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.
@llvmbot
Copy link
Member

llvmbot commented Feb 12, 2025

@llvm/pr-subscribers-lldb

Author: Pavel Labath (labath)

Changes

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 --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 {};
 };

@labath labath merged commit 70b994b into llvm:main Feb 13, 2025
9 checks passed
@labath labath deleted the simpl branch February 13, 2025 08:05
flovent pushed a commit to flovent/llvm-project that referenced this pull request Feb 13, 2025
…ity wrappers (llvm#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.
joaosaffran pushed a commit to joaosaffran/llvm-project that referenced this pull request Feb 14, 2025
…ity wrappers (llvm#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.
sivan-shani pushed a commit to sivan-shani/llvm-project that referenced this pull request Feb 24, 2025
…ity wrappers (llvm#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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants