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 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" -o "type lookup t2" \ +// RUN: -o exit | FileCheck %s --check-prefix=TYPE // LOG: unique name: t3 >::t4 -// TYPE: (t2 >) v1 = {} -// TYPE-NEXT: (t2 >) v2 = {} +// TYPE-LABEL: target variable v1 v2 +// TYPE: (t2 >) v1 = {} +// TYPE: (t2 >) v2 = {} + +// TYPE-LABEL: type lookup t2 +// TYPE: template<> struct t2 { +// TYPE-NEXT: } + +// TYPE-LABEL: type lookup t2 +// TYPE: template<> struct t2 { +// TYPE-NEXT: } struct outer_struct1 { template struct t1 {}; @@ -30,6 +41,9 @@ template struct t2 {}; t2> v1; t2> v2; +t2 v1_1; +t2 v1_2; + template struct t3 { struct t4 {}; };