[llvm] f09ca5c - DWARFDie: Improve type printing for function and array types - with qualifiers (cv/reference) and pointers to them
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Sun Sep 19 12:59:40 PDT 2021
Author: David Blaikie
Date: 2021-09-19T12:59:31-07:00
New Revision: f09ca5c6461b604113b6e1adb825be2d92575aff
URL: https://github.com/llvm/llvm-project/commit/f09ca5c6461b604113b6e1adb825be2d92575aff
DIFF: https://github.com/llvm/llvm-project/commit/f09ca5c6461b604113b6e1adb825be2d92575aff.diff
LOG: DWARFDie: Improve type printing for function and array types - with qualifiers (cv/reference) and pointers to them
Added:
Modified:
llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
llvm/test/tools/llvm-dwarfdump/X86/prettyprint_types.s
Removed:
################################################################################
diff --git a/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp b/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
index bd0bd7f4ac003..1561b0bdf7a12 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
@@ -173,7 +173,15 @@ struct DWARFTypePrinter {
}
}
+ DWARFDie skipQualifiers(DWARFDie D) {
+ while (D && (D.getTag() == DW_TAG_const_type ||
+ D.getTag() == DW_TAG_volatile_type))
+ D = D.getAttributeValueAsReferencedDie(DW_AT_type);
+ return D;
+ }
+
bool needsParens(DWARFDie D) {
+ D = skipQualifiers(D);
return D && (D.getTag() == DW_TAG_subroutine_type || D.getTag() == DW_TAG_array_type);
}
@@ -241,6 +249,10 @@ struct DWARFTypePrinter {
Word = false;
break;
}
+ case DW_TAG_const_type:
+ case DW_TAG_volatile_type:
+ appendConstVolatileQualifierBefore(D);
+ break;
default:
appendTypeTagName(T);
appendUnqualifiedNameBefore(Inner);
@@ -255,30 +267,18 @@ struct DWARFTypePrinter {
return;
switch (D.getTag()) {
case DW_TAG_subroutine_type: {
- OS << '(';
- bool First = true;
- bool RealFirst = true;
- for (const DWARFDie &C : D.children()) {
- if (C.getTag() == DW_TAG_formal_parameter) {
- if (SkipFirstParamIfArtificial && RealFirst &&
- C.find(DW_AT_artificial)) {
- RealFirst = false;
- continue;
- }
- if (!First)
- OS << ", ";
- First = false;
- appendUnqualifiedName(
- C.getAttributeValueAsReferencedDie(DW_AT_type));
- }
- }
- OS << ')';
+ appendSubroutineNameAfter(D, Inner, SkipFirstParamIfArtificial, false,
+ false);
break;
}
case DW_TAG_array_type: {
appendArrayType(D);
break;
}
+ case DW_TAG_const_type:
+ case DW_TAG_volatile_type:
+ appendConstVolatileQualifierAfter(D);
+ break;
case DW_TAG_ptr_to_member_type:
case DW_TAG_reference_type:
case DW_TAG_rvalue_reference_type:
@@ -286,7 +286,7 @@ struct DWARFTypePrinter {
if (needsParens(Inner))
OS << ')';
appendUnqualifiedNameAfter(
- Inner, D.getAttributeValueAsReferencedDie(DW_AT_type),
+ Inner, Inner.getAttributeValueAsReferencedDie(DW_AT_type),
/*SkipFirstParamIfArtificial=*/D.getTag() ==
DW_TAG_ptr_to_member_type);
break;
@@ -296,6 +296,66 @@ struct DWARFTypePrinter {
}
}
+ void decomposeConstVolatile(DWARFDie &N, DWARFDie &T, DWARFDie &C,
+ DWARFDie &V) {
+ (N.getTag() == DW_TAG_const_type ? C : V) = N;
+ T = N.getAttributeValueAsReferencedDie(DW_AT_type);
+ if (T) {
+ auto Tag = T.getTag();
+ if (Tag == DW_TAG_const_type) {
+ C = T;
+ T = T.getAttributeValueAsReferencedDie(DW_AT_type);
+ } else if (Tag == DW_TAG_volatile_type) {
+ V = T;
+ T = T.getAttributeValueAsReferencedDie(DW_AT_type);
+ }
+ }
+ }
+ void appendConstVolatileQualifierAfter(DWARFDie N) {
+ DWARFDie C;
+ DWARFDie V;
+ DWARFDie T;
+ decomposeConstVolatile(N, T, C, V);
+ if (T && T.getTag() == DW_TAG_subroutine_type)
+ appendSubroutineNameAfter(T,
+ T.getAttributeValueAsReferencedDie(DW_AT_type),
+ false, C.isValid(), V.isValid());
+ else
+ appendUnqualifiedNameAfter(
+ T, T.getAttributeValueAsReferencedDie(DW_AT_type));
+ }
+ void appendConstVolatileQualifierBefore(DWARFDie N) {
+ DWARFDie C;
+ DWARFDie V;
+ DWARFDie T;
+ decomposeConstVolatile(N, T, C, V);
+ bool Subroutine = T && T.getTag() == DW_TAG_subroutine_type;
+ DWARFDie A = T;
+ while (A && A.getTag() == DW_TAG_array_type)
+ A = A.getAttributeValueAsReferencedDie(DW_AT_type);
+ bool Leading =
+ (!A || (A.getTag() != DW_TAG_pointer_type &&
+ A.getTag() != llvm::dwarf::DW_TAG_ptr_to_member_type)) &&
+ !Subroutine;
+ if (Leading) {
+ if (C)
+ OS << "const ";
+ if (V)
+ OS << "volatile ";
+ }
+ appendUnqualifiedNameBefore(T);
+ if (!Leading && !Subroutine) {
+ Word = true;
+ if (C)
+ OS << "const";
+ if (V) {
+ if (C)
+ OS << ' ';
+ OS << "volatile";
+ }
+ }
+ }
+
/// Recursively append the DIE type name when applicable.
void appendUnqualifiedName(const DWARFDie &D,
bool SkipFirstParamIfArtificial = false) {
@@ -307,6 +367,68 @@ struct DWARFTypePrinter {
DWARFDie Inner = appendUnqualifiedNameBefore(D);
appendUnqualifiedNameAfter(D, Inner, SkipFirstParamIfArtificial);
}
+
+ void appendSubroutineNameAfter(DWARFDie D, DWARFDie Inner,
+ bool SkipFirstParamIfArtificial, bool Const,
+ bool Volatile) {
+ DWARFDie FirstParamIfArtificial;
+ OS << '(';
+ EndedWithTemplate = false;
+ bool First = true;
+ bool RealFirst = true;
+ for (DWARFDie P : D) {
+ if (P.getTag() != DW_TAG_formal_parameter)
+ return;
+ DWARFDie T = P.getAttributeValueAsReferencedDie(DW_AT_type);
+ if (SkipFirstParamIfArtificial && RealFirst && P.find(DW_AT_artificial)) {
+ FirstParamIfArtificial = T;
+ RealFirst = false;
+ continue;
+ }
+ if (!First) {
+ OS << ", ";
+ }
+ First = false;
+ appendUnqualifiedName(T);
+ }
+ EndedWithTemplate = false;
+ OS << ')';
+ if (FirstParamIfArtificial) {
+ if (DWARFDie P = FirstParamIfArtificial) {
+ if (P.getTag() == DW_TAG_pointer_type) {
+ DWARFDie C;
+ DWARFDie V;
+ auto CVStep = [&](DWARFDie CV) {
+ if (DWARFDie U = CV.getAttributeValueAsReferencedDie(DW_AT_type)) {
+ if (U.getTag() == DW_TAG_const_type)
+ return C = U;
+ if (U.getTag() == DW_TAG_volatile_type)
+ return V = U;
+ }
+ return DWARFDie();
+ };
+ if (DWARFDie CV = CVStep(P)) {
+ CVStep(CV);
+ }
+ if (C)
+ OS << " const";
+ if (V)
+ OS << " volatile";
+ }
+ }
+ } else {
+ if (Const)
+ OS << " const";
+ if (Volatile)
+ OS << " volatile";
+ }
+ if (D.find(DW_AT_reference))
+ OS << " &";
+ if (D.find(DW_AT_rvalue_reference))
+ OS << " &&";
+ appendUnqualifiedNameAfter(
+ Inner, Inner.getAttributeValueAsReferencedDie(DW_AT_type));
+ }
};
} // anonymous namespace
diff --git a/llvm/test/tools/llvm-dwarfdump/X86/prettyprint_types.s b/llvm/test/tools/llvm-dwarfdump/X86/prettyprint_types.s
index 50f86ec76256c..7fc2e29c0edfa 100644
--- a/llvm/test/tools/llvm-dwarfdump/X86/prettyprint_types.s
+++ b/llvm/test/tools/llvm-dwarfdump/X86/prettyprint_types.s
@@ -2,10 +2,31 @@
# RUN: | llvm-dwarfdump --name=t1 --show-children - | FileCheck %s
# Assembly generated from the following source:
-# struct foo;
-# template<typename ...Ts>
-# struct t1 { };
-# t1<int, int*, int&, int&&, int foo::*, void(foo::*)(int), int (), void (int), void (int, int), void (*)(foo*, int)> v1;
+#
+# struct foo;
+# template <typename... Ts>
+# struct t1 {};
+# t1<
+# // base type
+# int,
+# // reference type
+# int &,
+# // rvalue reference type
+# int &&,
+# // pointer types
+# int *, const void *const *, const void *const, int *const volatile,
+# int *volatile, void *const,
+# // pointer to member variable
+# int foo::*,
+# // pointer to member functions
+# void (foo::*)(int), void (foo::*const &)() const volatile &&,
+# // arrays
+# int *const (&)[1], int *const[1], const int (&)[1], const int[1],
+# // subroutine types
+# int(), void(int), void(int, int), void (*)(foo *, int), void (*const)(),
+# void() const, void() volatile &&, void() const volatile &,
+# void(const volatile foo *), void (*(int))(float)>
+# v1;
#
# With the name of the "t1<...>" type renamed to "t1" (or using
# -gsimple-template-names) to make it easy to query for.
@@ -14,31 +35,47 @@
# intended and to avoid visiting subtypes that aren't intended to be tested
# separately.
-# CHECK: DW_TAG_GNU_template_parameter_pack
-
# base_type
# CHECK: DW_AT_type{{.*}}"int"
-# pointer_type
-# CHECK: DW_AT_type{{.*}}"int *"
-
# reference_type
# CHECK: DW_AT_type{{.*}}"int &"
# rvalue_reference_type
# CHECK: DW_AT_type{{.*}}"int &&"
+# pointer_type
+# CHECK: DW_AT_type{{.*}}"int *"
+# CHECK: DW_AT_type{{.*}}"const void *const *")
+# CHECK: DW_AT_type{{.*}}"const void *const")
+# CHECK: DW_AT_type{{.*}}"int *const volatile")
+# CHECK: DW_AT_type{{.*}}"int *volatile")
+# CHECK: DW_AT_type{{.*}}"void *const")
+
# ptr_to_member_type
# CHECK: DW_AT_type{{.*}}"int foo::*"
# ptr_to_member_type to a member function
# CHECK: DW_AT_type{{.*}}"void (foo::*)(int)"
+# const reference to a pointer to member function (with const, volatile, rvalue ref qualifiers)
+# CHECK: DW_AT_type{{.*}}"void (foo::*const &)() const volatile &&")
+
+# CHECK: DW_AT_type{{.*}}"int *const(&)[1]")
+# CHECK: DW_AT_type{{.*}}"int *const[1]")
+# CHECK: DW_AT_type{{.*}}"const int (&)[1]")
+# CHECK: DW_AT_type{{.*}}"const int [1]")
# subroutine types
# CHECK: DW_AT_type{{.*}}"int ()"
# CHECK: DW_AT_type{{.*}}"void (int)"
# CHECK: DW_AT_type{{.*}}"void (int, int)"
# CHECK: DW_AT_type{{.*}}"void (*)(foo *, int)"
+# CHECK: DW_AT_type{{.*}}"void (*const)()")
+# CHECK: DW_AT_type{{.*}}"void () const")
+# CHECK: DW_AT_type{{.*}}"void () volatile &&")
+# CHECK: DW_AT_type{{.*}}"void () const volatile &")
+# CHECK: DW_AT_type{{.*}}"void (const volatile foo *)")
+# CHECK: DW_AT_type{{.*}}"void (*(int))(float)")
.section .debug_abbrev,"", at progbits
.byte 1 # Abbreviation Code
@@ -114,27 +151,51 @@
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.byte 7 # Abbreviation Code
- .byte 15 # DW_TAG_pointer_type
+ .byte 16 # DW_TAG_reference_type
.byte 0 # DW_CHILDREN_no
.byte 73 # DW_AT_type
.byte 19 # DW_FORM_ref4
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.byte 8 # Abbreviation Code
- .byte 16 # DW_TAG_reference_type
+ .byte 66 # DW_TAG_rvalue_reference_type
.byte 0 # DW_CHILDREN_no
.byte 73 # DW_AT_type
.byte 19 # DW_FORM_ref4
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.byte 9 # Abbreviation Code
- .byte 66 # DW_TAG_rvalue_reference_type
+ .byte 15 # DW_TAG_pointer_type
.byte 0 # DW_CHILDREN_no
.byte 73 # DW_AT_type
.byte 19 # DW_FORM_ref4
.byte 0 # EOM(1)
.byte 0 # EOM(2)
.byte 10 # Abbreviation Code
+ .byte 38 # DW_TAG_const_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 11 # Abbreviation Code
+ .byte 38 # DW_TAG_const_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 12 # Abbreviation Code
+ .byte 53 # DW_TAG_volatile_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 13 # Abbreviation Code
+ .byte 15 # DW_TAG_pointer_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 14 # Abbreviation Code
.byte 31 # DW_TAG_ptr_to_member_type
.byte 0 # DW_CHILDREN_no
.byte 73 # DW_AT_type
@@ -143,7 +204,7 @@
.byte 19 # DW_FORM_ref4
.byte 0 # EOM(1)
.byte 0 # EOM(2)
- .byte 11 # Abbreviation Code
+ .byte 15 # Abbreviation Code
.byte 19 # DW_TAG_structure_type
.byte 0 # DW_CHILDREN_no
.byte 3 # DW_AT_name
@@ -152,12 +213,12 @@
.byte 25 # DW_FORM_flag_present
.byte 0 # EOM(1)
.byte 0 # EOM(2)
- .byte 12 # Abbreviation Code
+ .byte 16 # Abbreviation Code
.byte 21 # DW_TAG_subroutine_type
.byte 1 # DW_CHILDREN_yes
.byte 0 # EOM(1)
.byte 0 # EOM(2)
- .byte 13 # Abbreviation Code
+ .byte 17 # Abbreviation Code
.byte 5 # DW_TAG_formal_parameter
.byte 0 # DW_CHILDREN_no
.byte 73 # DW_AT_type
@@ -166,16 +227,76 @@
.byte 25 # DW_FORM_flag_present
.byte 0 # EOM(1)
.byte 0 # EOM(2)
- .byte 14 # Abbreviation Code
+ .byte 18 # Abbreviation Code
.byte 5 # DW_TAG_formal_parameter
.byte 0 # DW_CHILDREN_no
.byte 73 # DW_AT_type
.byte 19 # DW_FORM_ref4
.byte 0 # EOM(1)
.byte 0 # EOM(2)
- .byte 15 # Abbreviation Code
+ .byte 19 # Abbreviation Code
+ .byte 21 # DW_TAG_subroutine_type
+ .byte 1 # DW_CHILDREN_yes
+ .byte 120 # DW_AT_rvalue_reference
+ .byte 25 # DW_FORM_flag_present
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 20 # Abbreviation Code
+ .byte 1 # DW_TAG_array_type
+ .byte 1 # DW_CHILDREN_yes
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 21 # Abbreviation Code
+ .byte 33 # DW_TAG_subrange_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 55 # DW_AT_count
+ .byte 11 # DW_FORM_data1
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 22 # Abbreviation Code
+ .byte 36 # DW_TAG_base_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 3 # DW_AT_name
+ .byte 14 # DW_FORM_strp
+ .byte 11 # DW_AT_byte_size
+ .byte 11 # DW_FORM_data1
+ .byte 62 # DW_AT_encoding
+ .byte 11 # DW_FORM_data1
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 23 # Abbreviation Code
+ .byte 21 # DW_TAG_subroutine_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 24 # Abbreviation Code
.byte 21 # DW_TAG_subroutine_type
.byte 0 # DW_CHILDREN_no
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 25 # Abbreviation Code
+ .byte 21 # DW_TAG_subroutine_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 120 # DW_AT_rvalue_reference
+ .byte 25 # DW_FORM_flag_present
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 26 # Abbreviation Code
+ .byte 21 # DW_TAG_subroutine_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 119 # DW_AT_reference
+ .byte 25 # DW_FORM_flag_present
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 27 # Abbreviation Code
+ .byte 21 # DW_TAG_subroutine_type
+ .byte 1 # DW_CHILDREN_yes
.byte 73 # DW_AT_type
.byte 19 # DW_FORM_ref4
.byte 0 # EOM(1)
@@ -188,7 +309,7 @@
.short 4 # DWARF version number
.long .debug_abbrev # Offset Into Abbrev. Section
.byte 8 # Address Size (in bytes)
- .byte 1 # Abbrev [1] 0xb:0xd7 DW_TAG_compile_unit
+ .byte 1 # Abbrev [1] 0xb:0x1ee DW_TAG_compile_unit
.long .Linfo_string0 # DW_AT_producer
.short 33 # DW_AT_language
.long .Linfo_string1 # DW_AT_name
@@ -199,109 +320,240 @@
.long 51 # DW_AT_type
# DW_AT_external
.byte 1 # DW_AT_decl_file
- .byte 4 # DW_AT_decl_line
+ .byte 24 # DW_AT_decl_line
.byte 9 # DW_AT_location
.byte 3
.quad v1
- .byte 3 # Abbrev [3] 0x33:0x42 DW_TAG_structure_type
+ .byte 3 # Abbrev [3] 0x33:0x92 DW_TAG_structure_type
.byte 5 # DW_AT_calling_convention
- .long .Linfo_string7 # DW_AT_name
+ .long .Linfo_string9 # DW_AT_name
.byte 1 # DW_AT_byte_size
.byte 1 # DW_AT_decl_file
.byte 3 # DW_AT_decl_line
- .byte 4 # Abbrev [4] 0x3c:0x38 DW_TAG_GNU_template_parameter_pack
+ .byte 4 # Abbrev [4] 0x3c:0x88 DW_TAG_GNU_template_parameter_pack
.long .Linfo_string4 # DW_AT_name
.byte 5 # Abbrev [5] 0x41:0x5 DW_TAG_template_type_parameter
- .long 117 # DW_AT_type
+ .long 197 # DW_AT_type
.byte 5 # Abbrev [5] 0x46:0x5 DW_TAG_template_type_parameter
- .long 124 # DW_AT_type
+ .long 204 # DW_AT_type
.byte 5 # Abbrev [5] 0x4b:0x5 DW_TAG_template_type_parameter
- .long 129 # DW_AT_type
+ .long 209 # DW_AT_type
.byte 5 # Abbrev [5] 0x50:0x5 DW_TAG_template_type_parameter
- .long 134 # DW_AT_type
+ .long 214 # DW_AT_type
.byte 5 # Abbrev [5] 0x55:0x5 DW_TAG_template_type_parameter
- .long 139 # DW_AT_type
+ .long 219 # DW_AT_type
.byte 5 # Abbrev [5] 0x5a:0x5 DW_TAG_template_type_parameter
- .long 153 # DW_AT_type
+ .long 224 # DW_AT_type
.byte 5 # Abbrev [5] 0x5f:0x5 DW_TAG_template_type_parameter
- .long 179 # DW_AT_type
+ .long 235 # DW_AT_type
.byte 5 # Abbrev [5] 0x64:0x5 DW_TAG_template_type_parameter
- .long 184 # DW_AT_type
+ .long 240 # DW_AT_type
.byte 5 # Abbrev [5] 0x69:0x5 DW_TAG_template_type_parameter
- .long 191 # DW_AT_type
+ .long 245 # DW_AT_type
.byte 5 # Abbrev [5] 0x6e:0x5 DW_TAG_template_type_parameter
- .long 203 # DW_AT_type
+ .long 251 # DW_AT_type
+ .byte 5 # Abbrev [5] 0x73:0x5 DW_TAG_template_type_parameter
+ .long 265 # DW_AT_type
+ .byte 5 # Abbrev [5] 0x78:0x5 DW_TAG_template_type_parameter
+ .long 291 # DW_AT_type
+ .byte 5 # Abbrev [5] 0x7d:0x5 DW_TAG_template_type_parameter
+ .long 332 # DW_AT_type
+ .byte 5 # Abbrev [5] 0x82:0x5 DW_TAG_template_type_parameter
+ .long 337 # DW_AT_type
+ .byte 5 # Abbrev [5] 0x87:0x5 DW_TAG_template_type_parameter
+ .long 361 # DW_AT_type
+ .byte 5 # Abbrev [5] 0x8c:0x5 DW_TAG_template_type_parameter
+ .long 366 # DW_AT_type
+ .byte 5 # Abbrev [5] 0x91:0x5 DW_TAG_template_type_parameter
+ .long 383 # DW_AT_type
+ .byte 5 # Abbrev [5] 0x96:0x5 DW_TAG_template_type_parameter
+ .long 388 # DW_AT_type
+ .byte 5 # Abbrev [5] 0x9b:0x5 DW_TAG_template_type_parameter
+ .long 395 # DW_AT_type
+ .byte 5 # Abbrev [5] 0xa0:0x5 DW_TAG_template_type_parameter
+ .long 407 # DW_AT_type
+ .byte 5 # Abbrev [5] 0xa5:0x5 DW_TAG_template_type_parameter
+ .long 429 # DW_AT_type
+ .byte 5 # Abbrev [5] 0xaa:0x5 DW_TAG_template_type_parameter
+ .long 440 # DW_AT_type
+ .byte 5 # Abbrev [5] 0xaf:0x5 DW_TAG_template_type_parameter
+ .long 445 # DW_AT_type
+ .byte 5 # Abbrev [5] 0xb4:0x5 DW_TAG_template_type_parameter
+ .long 451 # DW_AT_type
+ .byte 5 # Abbrev [5] 0xb9:0x5 DW_TAG_template_type_parameter
+ .long 462 # DW_AT_type
+ .byte 5 # Abbrev [5] 0xbe:0x5 DW_TAG_template_type_parameter
+ .long 474 # DW_AT_type
.byte 0 # End Of Children Mark
.byte 0 # End Of Children Mark
- .byte 6 # Abbrev [6] 0x75:0x7 DW_TAG_base_type
+ .byte 6 # Abbrev [6] 0xc5:0x7 DW_TAG_base_type
.long .Linfo_string5 # DW_AT_name
.byte 5 # DW_AT_encoding
.byte 4 # DW_AT_byte_size
- .byte 7 # Abbrev [7] 0x7c:0x5 DW_TAG_pointer_type
- .long 117 # DW_AT_type
- .byte 8 # Abbrev [8] 0x81:0x5 DW_TAG_reference_type
- .long 117 # DW_AT_type
- .byte 9 # Abbrev [9] 0x86:0x5 DW_TAG_rvalue_reference_type
- .long 117 # DW_AT_type
- .byte 10 # Abbrev [10] 0x8b:0x9 DW_TAG_ptr_to_member_type
- .long 117 # DW_AT_type
- .long 148 # DW_AT_containing_type
- .byte 11 # Abbrev [11] 0x94:0x5 DW_TAG_structure_type
+ .byte 7 # Abbrev [7] 0xcc:0x5 DW_TAG_reference_type
+ .long 197 # DW_AT_type
+ .byte 8 # Abbrev [8] 0xd1:0x5 DW_TAG_rvalue_reference_type
+ .long 197 # DW_AT_type
+ .byte 9 # Abbrev [9] 0xd6:0x5 DW_TAG_pointer_type
+ .long 197 # DW_AT_type
+ .byte 9 # Abbrev [9] 0xdb:0x5 DW_TAG_pointer_type
+ .long 224 # DW_AT_type
+ .byte 10 # Abbrev [10] 0xe0:0x5 DW_TAG_const_type
+ .long 229 # DW_AT_type
+ .byte 9 # Abbrev [9] 0xe5:0x5 DW_TAG_pointer_type
+ .long 234 # DW_AT_type
+ .byte 11 # Abbrev [11] 0xea:0x1 DW_TAG_const_type
+ .byte 10 # Abbrev [10] 0xeb:0x5 DW_TAG_const_type
+ .long 240 # DW_AT_type
+ .byte 12 # Abbrev [12] 0xf0:0x5 DW_TAG_volatile_type
+ .long 214 # DW_AT_type
+ .byte 10 # Abbrev [10] 0xf5:0x5 DW_TAG_const_type
+ .long 250 # DW_AT_type
+ .byte 13 # Abbrev [13] 0xfa:0x1 DW_TAG_pointer_type
+ .byte 14 # Abbrev [14] 0xfb:0x9 DW_TAG_ptr_to_member_type
+ .long 197 # DW_AT_type
+ .long 260 # DW_AT_containing_type
+ .byte 15 # Abbrev [15] 0x104:0x5 DW_TAG_structure_type
.long .Linfo_string6 # DW_AT_name
# DW_AT_declaration
- .byte 10 # Abbrev [10] 0x99:0x9 DW_TAG_ptr_to_member_type
- .long 162 # DW_AT_type
- .long 148 # DW_AT_containing_type
- .byte 12 # Abbrev [12] 0xa2:0xc DW_TAG_subroutine_type
- .byte 13 # Abbrev [13] 0xa3:0x5 DW_TAG_formal_parameter
- .long 174 # DW_AT_type
+ .byte 14 # Abbrev [14] 0x109:0x9 DW_TAG_ptr_to_member_type
+ .long 274 # DW_AT_type
+ .long 260 # DW_AT_containing_type
+ .byte 16 # Abbrev [16] 0x112:0xc DW_TAG_subroutine_type
+ .byte 17 # Abbrev [17] 0x113:0x5 DW_TAG_formal_parameter
+ .long 286 # DW_AT_type
# DW_AT_artificial
- .byte 14 # Abbrev [14] 0xa8:0x5 DW_TAG_formal_parameter
- .long 117 # DW_AT_type
+ .byte 18 # Abbrev [18] 0x118:0x5 DW_TAG_formal_parameter
+ .long 197 # DW_AT_type
+ .byte 0 # End Of Children Mark
+ .byte 9 # Abbrev [9] 0x11e:0x5 DW_TAG_pointer_type
+ .long 260 # DW_AT_type
+ .byte 7 # Abbrev [7] 0x123:0x5 DW_TAG_reference_type
+ .long 296 # DW_AT_type
+ .byte 10 # Abbrev [10] 0x128:0x5 DW_TAG_const_type
+ .long 301 # DW_AT_type
+ .byte 14 # Abbrev [14] 0x12d:0x9 DW_TAG_ptr_to_member_type
+ .long 310 # DW_AT_type
+ .long 260 # DW_AT_containing_type
+ .byte 19 # Abbrev [19] 0x136:0x7 DW_TAG_subroutine_type
+ # DW_AT_rvalue_reference
+ .byte 17 # Abbrev [17] 0x137:0x5 DW_TAG_formal_parameter
+ .long 317 # DW_AT_type
+ # DW_AT_artificial
+ .byte 0 # End Of Children Mark
+ .byte 9 # Abbrev [9] 0x13d:0x5 DW_TAG_pointer_type
+ .long 322 # DW_AT_type
+ .byte 10 # Abbrev [10] 0x142:0x5 DW_TAG_const_type
+ .long 327 # DW_AT_type
+ .byte 12 # Abbrev [12] 0x147:0x5 DW_TAG_volatile_type
+ .long 260 # DW_AT_type
+ .byte 7 # Abbrev [7] 0x14c:0x5 DW_TAG_reference_type
+ .long 337 # DW_AT_type
+ .byte 10 # Abbrev [10] 0x151:0x5 DW_TAG_const_type
+ .long 342 # DW_AT_type
+ .byte 20 # Abbrev [20] 0x156:0xc DW_TAG_array_type
+ .long 214 # DW_AT_type
+ .byte 21 # Abbrev [21] 0x15b:0x6 DW_TAG_subrange_type
+ .long 354 # DW_AT_type
+ .byte 1 # DW_AT_count
.byte 0 # End Of Children Mark
- .byte 7 # Abbrev [7] 0xae:0x5 DW_TAG_pointer_type
- .long 148 # DW_AT_type
- .byte 15 # Abbrev [15] 0xb3:0x5 DW_TAG_subroutine_type
- .long 117 # DW_AT_type
- .byte 12 # Abbrev [12] 0xb8:0x7 DW_TAG_subroutine_type
- .byte 14 # Abbrev [14] 0xb9:0x5 DW_TAG_formal_parameter
- .long 117 # DW_AT_type
+ .byte 22 # Abbrev [22] 0x162:0x7 DW_TAG_base_type
+ .long .Linfo_string7 # DW_AT_name
+ .byte 8 # DW_AT_byte_size
+ .byte 7 # DW_AT_encoding
+ .byte 7 # Abbrev [7] 0x169:0x5 DW_TAG_reference_type
+ .long 366 # DW_AT_type
+ .byte 10 # Abbrev [10] 0x16e:0x5 DW_TAG_const_type
+ .long 371 # DW_AT_type
+ .byte 20 # Abbrev [20] 0x173:0xc DW_TAG_array_type
+ .long 197 # DW_AT_type
+ .byte 21 # Abbrev [21] 0x178:0x6 DW_TAG_subrange_type
+ .long 354 # DW_AT_type
+ .byte 1 # DW_AT_count
+ .byte 0 # End Of Children Mark
+ .byte 23 # Abbrev [23] 0x17f:0x5 DW_TAG_subroutine_type
+ .long 197 # DW_AT_type
+ .byte 16 # Abbrev [16] 0x184:0x7 DW_TAG_subroutine_type
+ .byte 18 # Abbrev [18] 0x185:0x5 DW_TAG_formal_parameter
+ .long 197 # DW_AT_type
+ .byte 0 # End Of Children Mark
+ .byte 16 # Abbrev [16] 0x18b:0xc DW_TAG_subroutine_type
+ .byte 18 # Abbrev [18] 0x18c:0x5 DW_TAG_formal_parameter
+ .long 197 # DW_AT_type
+ .byte 18 # Abbrev [18] 0x191:0x5 DW_TAG_formal_parameter
+ .long 197 # DW_AT_type
.byte 0 # End Of Children Mark
- .byte 12 # Abbrev [12] 0xbf:0xc DW_TAG_subroutine_type
- .byte 14 # Abbrev [14] 0xc0:0x5 DW_TAG_formal_parameter
- .long 117 # DW_AT_type
- .byte 14 # Abbrev [14] 0xc5:0x5 DW_TAG_formal_parameter
- .long 117 # DW_AT_type
+ .byte 9 # Abbrev [9] 0x197:0x5 DW_TAG_pointer_type
+ .long 412 # DW_AT_type
+ .byte 16 # Abbrev [16] 0x19c:0xc DW_TAG_subroutine_type
+ .byte 18 # Abbrev [18] 0x19d:0x5 DW_TAG_formal_parameter
+ .long 424 # DW_AT_type
+ .byte 18 # Abbrev [18] 0x1a2:0x5 DW_TAG_formal_parameter
+ .long 197 # DW_AT_type
.byte 0 # End Of Children Mark
- .byte 7 # Abbrev [7] 0xcb:0x5 DW_TAG_pointer_type
- .long 208 # DW_AT_type
- .byte 12 # Abbrev [12] 0xd0:0xc DW_TAG_subroutine_type
- .byte 14 # Abbrev [14] 0xd1:0x5 DW_TAG_formal_parameter
- .long 220 # DW_AT_type
- .byte 14 # Abbrev [14] 0xd6:0x5 DW_TAG_formal_parameter
- .long 117 # DW_AT_type
+ .byte 9 # Abbrev [9] 0x1a8:0x5 DW_TAG_pointer_type
+ .long 260 # DW_AT_type
+ .byte 10 # Abbrev [10] 0x1ad:0x5 DW_TAG_const_type
+ .long 434 # DW_AT_type
+ .byte 9 # Abbrev [9] 0x1b2:0x5 DW_TAG_pointer_type
+ .long 439 # DW_AT_type
+ .byte 24 # Abbrev [24] 0x1b7:0x1 DW_TAG_subroutine_type
+ .byte 10 # Abbrev [10] 0x1b8:0x5 DW_TAG_const_type
+ .long 439 # DW_AT_type
+ .byte 12 # Abbrev [12] 0x1bd:0x5 DW_TAG_volatile_type
+ .long 450 # DW_AT_type
+ .byte 25 # Abbrev [25] 0x1c2:0x1 DW_TAG_subroutine_type
+ # DW_AT_rvalue_reference
+ .byte 10 # Abbrev [10] 0x1c3:0x5 DW_TAG_const_type
+ .long 456 # DW_AT_type
+ .byte 12 # Abbrev [12] 0x1c8:0x5 DW_TAG_volatile_type
+ .long 461 # DW_AT_type
+ .byte 26 # Abbrev [26] 0x1cd:0x1 DW_TAG_subroutine_type
+ # DW_AT_reference
+ .byte 16 # Abbrev [16] 0x1ce:0x7 DW_TAG_subroutine_type
+ .byte 18 # Abbrev [18] 0x1cf:0x5 DW_TAG_formal_parameter
+ .long 469 # DW_AT_type
.byte 0 # End Of Children Mark
- .byte 7 # Abbrev [7] 0xdc:0x5 DW_TAG_pointer_type
- .long 148 # DW_AT_type
+ .byte 9 # Abbrev [9] 0x1d5:0x5 DW_TAG_pointer_type
+ .long 322 # DW_AT_type
+ .byte 27 # Abbrev [27] 0x1da:0xb DW_TAG_subroutine_type
+ .long 485 # DW_AT_type
+ .byte 18 # Abbrev [18] 0x1df:0x5 DW_TAG_formal_parameter
+ .long 197 # DW_AT_type
+ .byte 0 # End Of Children Mark
+ .byte 9 # Abbrev [9] 0x1e5:0x5 DW_TAG_pointer_type
+ .long 490 # DW_AT_type
+ .byte 16 # Abbrev [16] 0x1ea:0x7 DW_TAG_subroutine_type
+ .byte 18 # Abbrev [18] 0x1eb:0x5 DW_TAG_formal_parameter
+ .long 497 # DW_AT_type
+ .byte 0 # End Of Children Mark
+ .byte 6 # Abbrev [6] 0x1f1:0x7 DW_TAG_base_type
+ .long .Linfo_string8 # DW_AT_name
+ .byte 4 # DW_AT_encoding
+ .byte 4 # DW_AT_byte_size
.byte 0 # End Of Children Mark
.Ldebug_info_end0:
.section .debug_str,"MS", at progbits,1
.Linfo_string0:
.asciz "clang version 14.0.0 (git at github.com:llvm/llvm-project.git 0543d3a279346152e88fb40f0f817ca8bd145864)" # string offset=0
.Linfo_string1:
- .asciz "/usr/local/google/home/blaikie/dev/scratch/test.cpp" # string offset=101
+ .asciz "test.cpp" # string offset=101
.Linfo_string2:
- .asciz "/usr/local/google/home/blaikie/dev/llvm/src" # string offset=153
+ .asciz "/usr/local/google/home/blaikie/dev/scratch" # string offset=110
.Linfo_string3:
- .asciz "v1" # string offset=197
+ .asciz "v1" # string offset=153
.Linfo_string4:
- .asciz "Ts" # string offset=200
+ .asciz "Ts" # string offset=156
.Linfo_string5:
- .asciz "int" # string offset=203
+ .asciz "int" # string offset=159
.Linfo_string6:
- .asciz "foo" # string offset=207
+ .asciz "foo" # string offset=163
.Linfo_string7:
- .asciz "t1" # string offset=211
+ .asciz "__ARRAY_SIZE_TYPE__" # string offset=167
+.Linfo_string8:
+ .asciz "float" # string offset=187
+.Linfo_string9:
+ .asciz "t1" # string offset=193
.ident "clang version 14.0.0 (git at github.com:llvm/llvm-project.git 0543d3a279346152e88fb40f0f817ca8bd145864)"
.section ".note.GNU-stack","", at progbits
.addrsig
More information about the llvm-commits
mailing list