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 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits