@@ -62,17 +62,10 @@ void DWARFTypePrinter::appendArrayType(const DWARFDie &D) {
62
62
EndedWithTemplate = false ;
63
63
}
64
64
65
- static DWARFDie resolveReferencedType (DWARFDie D,
66
- dwarf::Attribute Attr = DW_AT_type) {
67
- return D.getAttributeValueAsReferencedDie (Attr).resolveTypeUnitReference ();
68
- }
69
- static DWARFDie resolveReferencedType (DWARFDie D, DWARFFormValue F) {
70
- return D.getAttributeValueAsReferencedDie (F).resolveTypeUnitReference ();
71
- }
72
65
DWARFDie DWARFTypePrinter::skipQualifiers (DWARFDie D) {
73
66
while (D && (D.getTag () == DW_TAG_const_type ||
74
67
D.getTag () == DW_TAG_volatile_type))
75
- D = resolveReferencedType (D );
68
+ D = D. getAttributeValueAsReferencedDie (DW_AT_type );
76
69
return D;
77
70
}
78
71
@@ -103,7 +96,9 @@ DWARFTypePrinter::appendUnqualifiedNameBefore(DWARFDie D,
103
96
return DWARFDie ();
104
97
}
105
98
DWARFDie InnerDIE;
106
- auto Inner = [&] { return InnerDIE = resolveReferencedType (D); };
99
+ auto Inner = [&] {
100
+ return InnerDIE = D.getAttributeValueAsReferencedDie (DW_AT_type);
101
+ };
107
102
const dwarf::Tag T = D.getTag ();
108
103
switch (T) {
109
104
case DW_TAG_pointer_type: {
@@ -134,7 +129,8 @@ DWARFTypePrinter::appendUnqualifiedNameBefore(DWARFDie D,
134
129
OS << ' (' ;
135
130
else if (Word)
136
131
OS << ' ' ;
137
- if (DWARFDie Cont = resolveReferencedType (D, DW_AT_containing_type)) {
132
+ if (DWARFDie Cont =
133
+ D.getAttributeValueAsReferencedDie (DW_AT_containing_type)) {
138
134
appendQualifiedName (Cont);
139
135
EndedWithTemplate = false ;
140
136
OS << " ::" ;
@@ -173,7 +169,8 @@ DWARFTypePrinter::appendUnqualifiedNameBefore(DWARFDie D,
173
169
case DW_TAG_base_type:
174
170
*/
175
171
default : {
176
- const char *NamePtr = dwarf::toString (D.find (DW_AT_name), nullptr );
172
+ const char *NamePtr =
173
+ dwarf::toString (D.findRecursively (DW_AT_name), nullptr );
177
174
if (!NamePtr) {
178
175
appendTypeTagName (D.getTag ());
179
176
return DWARFDie ();
@@ -235,9 +232,9 @@ void DWARFTypePrinter::appendUnqualifiedNameAfter(
235
232
case DW_TAG_pointer_type: {
236
233
if (needsParens (Inner))
237
234
OS << ' )' ;
238
- appendUnqualifiedNameAfter (Inner, resolveReferencedType (Inner),
239
- /* SkipFirstParamIfArtificial= */ D. getTag () ==
240
- DW_TAG_ptr_to_member_type);
235
+ appendUnqualifiedNameAfter (
236
+ Inner, Inner. getAttributeValueAsReferencedDie (DW_AT_type),
237
+ /* SkipFirstParamIfArtificial= */ D. getTag () == DW_TAG_ptr_to_member_type);
241
238
break ;
242
239
}
243
240
case DW_TAG_LLVM_ptrauth_type: {
@@ -341,7 +338,7 @@ bool DWARFTypePrinter::appendTemplateParameters(DWARFDie D,
341
338
appendTemplateParameters (C, FirstParameter);
342
339
}
343
340
if (C.getTag () == dwarf::DW_TAG_template_value_parameter) {
344
- DWARFDie T = resolveReferencedType (C );
341
+ DWARFDie T = C. getAttributeValueAsReferencedDie (DW_AT_type );
345
342
Sep ();
346
343
if (T.getTag () == DW_TAG_enumeration_type) {
347
344
OS << ' (' ;
@@ -461,7 +458,7 @@ bool DWARFTypePrinter::appendTemplateParameters(DWARFDie D,
461
458
continue ;
462
459
auto TypeAttr = C.find (DW_AT_type);
463
460
Sep ();
464
- appendQualifiedName (TypeAttr ? resolveReferencedType (C, *TypeAttr)
461
+ appendQualifiedName (TypeAttr ? C. getAttributeValueAsReferencedDie ( *TypeAttr)
465
462
: DWARFDie ());
466
463
}
467
464
if (IsTemplate && *FirstParameter && FirstParameter == &FirstParameterValue) {
@@ -473,15 +470,15 @@ bool DWARFTypePrinter::appendTemplateParameters(DWARFDie D,
473
470
void DWARFTypePrinter::decomposeConstVolatile (DWARFDie &N, DWARFDie &T,
474
471
DWARFDie &C, DWARFDie &V) {
475
472
(N.getTag () == DW_TAG_const_type ? C : V) = N;
476
- T = resolveReferencedType (N );
473
+ T = N. getAttributeValueAsReferencedDie (DW_AT_type );
477
474
if (T) {
478
475
auto Tag = T.getTag ();
479
476
if (Tag == DW_TAG_const_type) {
480
477
C = T;
481
- T = resolveReferencedType (T );
478
+ T = T. getAttributeValueAsReferencedDie (DW_AT_type );
482
479
} else if (Tag == DW_TAG_volatile_type) {
483
480
V = T;
484
- T = resolveReferencedType (T );
481
+ T = T. getAttributeValueAsReferencedDie (DW_AT_type );
485
482
}
486
483
}
487
484
}
@@ -491,10 +488,11 @@ void DWARFTypePrinter::appendConstVolatileQualifierAfter(DWARFDie N) {
491
488
DWARFDie T;
492
489
decomposeConstVolatile (N, T, C, V);
493
490
if (T && T.getTag () == DW_TAG_subroutine_type)
494
- appendSubroutineNameAfter (T, resolveReferencedType (T), false , C. isValid ( ),
495
- V.isValid ());
491
+ appendSubroutineNameAfter (T, T. getAttributeValueAsReferencedDie (DW_AT_type ),
492
+ false , C. isValid (), V.isValid ());
496
493
else
497
- appendUnqualifiedNameAfter (T, resolveReferencedType (T));
494
+ appendUnqualifiedNameAfter (T,
495
+ T.getAttributeValueAsReferencedDie (DW_AT_type));
498
496
}
499
497
void DWARFTypePrinter::appendConstVolatileQualifierBefore (DWARFDie N) {
500
498
DWARFDie C;
@@ -504,7 +502,7 @@ void DWARFTypePrinter::appendConstVolatileQualifierBefore(DWARFDie N) {
504
502
bool Subroutine = T && T.getTag () == DW_TAG_subroutine_type;
505
503
DWARFDie A = T;
506
504
while (A && A.getTag () == DW_TAG_array_type)
507
- A = resolveReferencedType (A );
505
+ A = A. getAttributeValueAsReferencedDie (DW_AT_type );
508
506
bool Leading =
509
507
(!A || (A.getTag () != DW_TAG_pointer_type &&
510
508
A.getTag () != llvm::dwarf::DW_TAG_ptr_to_member_type)) &&
@@ -546,7 +544,7 @@ void DWARFTypePrinter::appendSubroutineNameAfter(
546
544
if (P.getTag () != DW_TAG_formal_parameter &&
547
545
P.getTag () != DW_TAG_unspecified_parameters)
548
546
return ;
549
- DWARFDie T = resolveReferencedType (P );
547
+ DWARFDie T = P. getAttributeValueAsReferencedDie (DW_AT_type );
550
548
if (SkipFirstParamIfArtificial && RealFirst && P.find (DW_AT_artificial)) {
551
549
FirstParamIfArtificial = T;
552
550
RealFirst = false ;
@@ -567,7 +565,7 @@ void DWARFTypePrinter::appendSubroutineNameAfter(
567
565
if (DWARFDie P = FirstParamIfArtificial) {
568
566
if (P.getTag () == DW_TAG_pointer_type) {
569
567
auto CVStep = [&](DWARFDie CV) {
570
- if (DWARFDie U = resolveReferencedType (CV )) {
568
+ if (DWARFDie U = CV. getAttributeValueAsReferencedDie (DW_AT_type )) {
571
569
Const |= U.getTag () == DW_TAG_const_type;
572
570
Volatile |= U.getTag () == DW_TAG_volatile_type;
573
571
return U;
@@ -653,7 +651,8 @@ void DWARFTypePrinter::appendSubroutineNameAfter(
653
651
if (D.find (DW_AT_rvalue_reference))
654
652
OS << " &&" ;
655
653
656
- appendUnqualifiedNameAfter (Inner, resolveReferencedType (Inner));
654
+ appendUnqualifiedNameAfter (
655
+ Inner, Inner.getAttributeValueAsReferencedDie (DW_AT_type));
657
656
}
658
657
void DWARFTypePrinter::appendScopes (DWARFDie D) {
659
658
if (D.getTag () == DW_TAG_compile_unit)
@@ -666,7 +665,6 @@ void DWARFTypePrinter::appendScopes(DWARFDie D) {
666
665
return ;
667
666
if (D.getTag () == DW_TAG_lexical_block)
668
667
return ;
669
- D = D.resolveTypeUnitReference ();
670
668
if (DWARFDie P = D.getParent ())
671
669
appendScopes (P);
672
670
appendUnqualifiedName (D);
0 commit comments