[llvm] 606ea0d - llvm-dwarfdump: support for type printing "decltype(nullptr)" as "nullptr_t"

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Sun Sep 19 17:34:58 PDT 2021


Author: David Blaikie
Date: 2021-09-19T17:33:56-07:00
New Revision: 606ea0dd2a7308d4af222ddcf0ae66c6267cb90d

URL: https://github.com/llvm/llvm-project/commit/606ea0dd2a7308d4af222ddcf0ae66c6267cb90d
DIFF: https://github.com/llvm/llvm-project/commit/606ea0dd2a7308d4af222ddcf0ae66c6267cb90d.diff

LOG: llvm-dwarfdump: support for type printing "decltype(nullptr)" as "nullptr_t"

This should probably be rendered as "std::nullptr_t" but for now clang
uses the unqualified name (which is ambiguous with possible user defined
name in the global namespace), so match that here.

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 1f161580204c..60adc907c113 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
@@ -122,9 +122,13 @@ struct DWARFTypePrinter {
   /// Dump the name encoded in the type tag.
   void appendTypeTagName(dwarf::Tag T) {
     StringRef TagStr = TagString(T);
-    if (!TagStr.startswith("DW_TAG_") || !TagStr.endswith("_type"))
+    static constexpr StringRef Prefix = "DW_TAG_";
+    static constexpr StringRef Suffix = "_type";
+    if (!TagStr.startswith(Prefix) || !TagStr.endswith(Suffix))
       return;
-    OS << TagStr.substr(7, TagStr.size() - 12) << " ";
+    OS << TagStr.substr(Prefix.size(),
+                        TagStr.size() - (Prefix.size() + Suffix.size()))
+       << " ";
   }
 
   void appendArrayType(const DWARFDie &D) {
@@ -201,11 +205,6 @@ struct DWARFTypePrinter {
       OS << "void";
       return DWARFDie();
     }
-    if (const char *Name = D.getName(DINameKind::LinkageName)) {
-      OS << Name;
-      return DWARFDie();
-    }
-
     DWARFDie Inner = D.getAttributeValueAsReferencedDie(DW_AT_type);
     const dwarf::Tag T = D.getTag();
     switch (T) {
@@ -260,9 +259,22 @@ struct DWARFTypePrinter {
         OS << "(anonymous namespace)";
       break;
     }
+    case DW_TAG_unspecified_type: {
+      StringRef TypeName = D.getShortName();
+      if (TypeName == "decltype(nullptr)")
+        TypeName = "nullptr_t";
+      Word = true;
+      OS << TypeName;
+      EndedWithTemplate = false;
+      break;
+    }
     default:
-      appendTypeTagName(T);
-      appendQualifiedNameBefore(Inner);
+      const char *NamePtr = dwarf::toString(D.find(DW_AT_name), nullptr);
+      if (!NamePtr) {
+        appendTypeTagName(D.getTag());
+        break;
+      }
+      OS << NamePtr;
       break;
     }
     return Inner;

diff  --git a/llvm/test/tools/llvm-dwarfdump/X86/prettyprint_types.s b/llvm/test/tools/llvm-dwarfdump/X86/prettyprint_types.s
index 6e07276dbb19..89cadffe3d0d 100644
--- a/llvm/test/tools/llvm-dwarfdump/X86/prettyprint_types.s
+++ b/llvm/test/tools/llvm-dwarfdump/X86/prettyprint_types.s
@@ -53,6 +53,12 @@
 # base_type
 # CHECK:   DW_AT_type{{.*}}"int"
 
+# FIXME: This might change in clang to std::nullptr_t which would be more
+# accurate and not be ambiguous with some arbitrary ::nullptr_t a user could
+# define. If that change is made, this code/test should be fixed too.
+# nullptr_t unspecified type
+# CHECK:   DW_AT_type{{.*}}"nullptr_t"
+
 # reference_type
 # CHECK:   DW_AT_type{{.*}}"int &"
 
@@ -173,51 +179,58 @@
 	.byte	0                               # EOM(1)
 	.byte	0                               # EOM(2)
 	.byte	7                               # Abbreviation Code
+	.byte	59                              # DW_TAG_unspecified_type
+	.byte	0                               # DW_CHILDREN_no
+	.byte	3                               # DW_AT_name
+	.byte	14                              # DW_FORM_strp
+	.byte	0                               # EOM(1)
+	.byte	0                               # EOM(2)
+	.byte	8                               # Abbreviation Code
 	.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	9                               # Abbreviation Code
 	.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	10                              # Abbreviation Code
 	.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	11                              # 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	12                              # 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	13                              # 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	14                              # 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	15                              # Abbreviation Code
 	.byte	31                              # DW_TAG_ptr_to_member_type
 	.byte	0                               # DW_CHILDREN_no
 	.byte	73                              # DW_AT_type
@@ -226,7 +239,7 @@
 	.byte	19                              # DW_FORM_ref4
 	.byte	0                               # EOM(1)
 	.byte	0                               # EOM(2)
-	.byte	15                              # Abbreviation Code
+	.byte	16                              # Abbreviation Code
 	.byte	19                              # DW_TAG_structure_type
 	.byte	0                               # DW_CHILDREN_no
 	.byte	3                               # DW_AT_name
@@ -235,12 +248,12 @@
 	.byte	25                              # DW_FORM_flag_present
 	.byte	0                               # EOM(1)
 	.byte	0                               # EOM(2)
-	.byte	16                              # Abbreviation Code
+	.byte	17                              # Abbreviation Code
 	.byte	21                              # DW_TAG_subroutine_type
 	.byte	1                               # DW_CHILDREN_yes
 	.byte	0                               # EOM(1)
 	.byte	0                               # EOM(2)
-	.byte	17                              # Abbreviation Code
+	.byte	18                              # Abbreviation Code
 	.byte	5                               # DW_TAG_formal_parameter
 	.byte	0                               # DW_CHILDREN_no
 	.byte	73                              # DW_AT_type
@@ -249,28 +262,28 @@
 	.byte	25                              # DW_FORM_flag_present
 	.byte	0                               # EOM(1)
 	.byte	0                               # EOM(2)
-	.byte	18                              # Abbreviation Code
+	.byte	19                              # 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	19                              # Abbreviation Code
+	.byte	20                              # 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	21                              # 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	22                              # Abbreviation Code
 	.byte	33                              # DW_TAG_subrange_type
 	.byte	0                               # DW_CHILDREN_no
 	.byte	73                              # DW_AT_type
@@ -279,7 +292,7 @@
 	.byte	11                              # DW_FORM_data1
 	.byte	0                               # EOM(1)
 	.byte	0                               # EOM(2)
-	.byte	22                              # Abbreviation Code
+	.byte	23                              # Abbreviation Code
 	.byte	36                              # DW_TAG_base_type
 	.byte	0                               # DW_CHILDREN_no
 	.byte	3                               # DW_AT_name
@@ -290,47 +303,47 @@
 	.byte	11                              # DW_FORM_data1
 	.byte	0                               # EOM(1)
 	.byte	0                               # EOM(2)
-	.byte	23                              # Abbreviation Code
+	.byte	24                              # 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	25                              # 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	26                              # 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	27                              # 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	28                              # 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)
 	.byte	0                               # EOM(2)
-	.byte	28                              # Abbreviation Code
+	.byte	29                              # Abbreviation Code
 	.byte	57                              # DW_TAG_namespace
 	.byte	1                               # DW_CHILDREN_yes
 	.byte	3                               # DW_AT_name
 	.byte	14                              # DW_FORM_strp
 	.byte	0                               # EOM(1)
 	.byte	0                               # EOM(2)
-	.byte	29                              # Abbreviation Code
+	.byte	30                              # Abbreviation Code
 	.byte	57                              # DW_TAG_namespace
 	.byte	1                               # DW_CHILDREN_yes
 	.byte	0                               # EOM(1)
@@ -343,7 +356,7 @@
 	.short	4                               # DWARF version number
 	.long	.debug_abbrev                   # Offset Into Abbrev. Section
 	.byte	8                               # Address Size (in bytes)
-	.byte	1                               # Abbrev [1] 0xb:0x247 DW_TAG_compile_unit
+	.byte	1                               # Abbrev [1] 0xb:0x251 DW_TAG_compile_unit
 	.long	.Linfo_string0                  # DW_AT_producer
 	.short	33                              # DW_AT_language
 	.long	.Linfo_string1                  # DW_AT_name
@@ -353,262 +366,266 @@
 	.long	.Linfo_string3                  # DW_AT_name
 	.long	51                              # DW_AT_type
 	.byte	1                               # DW_AT_decl_file
-	.byte	33                              # DW_AT_decl_line
+	.byte	35                              # DW_AT_decl_line
 	.byte	9                               # DW_AT_location
 	.byte	3
 	.quad	v1
-	.byte	3                               # Abbrev [3] 0x33:0xb5 DW_TAG_structure_type
+	.byte	3                               # Abbrev [3] 0x33:0xba DW_TAG_structure_type
 	.byte	5                               # DW_AT_calling_convention
-	.long	.Linfo_string12                 # DW_AT_name
+	.long	.Linfo_string13                 # 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:0xab DW_TAG_GNU_template_parameter_pack
+	.byte	4                               # Abbrev [4] 0x3c:0xb0 DW_TAG_GNU_template_parameter_pack
 	.long	.Linfo_string4                  # DW_AT_name
 	.byte	5                               # Abbrev [5] 0x41:0x5 DW_TAG_template_type_parameter
-	.long	232                             # DW_AT_type
+	.long	237                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x46:0x5 DW_TAG_template_type_parameter
-	.long	239                             # DW_AT_type
-	.byte	5                               # Abbrev [5] 0x4b:0x5 DW_TAG_template_type_parameter
 	.long	244                             # DW_AT_type
-	.byte	5                               # Abbrev [5] 0x50:0x5 DW_TAG_template_type_parameter
+	.byte	5                               # Abbrev [5] 0x4b:0x5 DW_TAG_template_type_parameter
 	.long	249                             # DW_AT_type
-	.byte	5                               # Abbrev [5] 0x55:0x5 DW_TAG_template_type_parameter
+	.byte	5                               # Abbrev [5] 0x50:0x5 DW_TAG_template_type_parameter
 	.long	254                             # DW_AT_type
-	.byte	5                               # Abbrev [5] 0x5a:0x5 DW_TAG_template_type_parameter
+	.byte	5                               # Abbrev [5] 0x55:0x5 DW_TAG_template_type_parameter
 	.long	259                             # DW_AT_type
+	.byte	5                               # Abbrev [5] 0x5a:0x5 DW_TAG_template_type_parameter
+	.long	264                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x5f:0x5 DW_TAG_template_type_parameter
-	.long	270                             # DW_AT_type
+	.long	269                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x64:0x5 DW_TAG_template_type_parameter
-	.long	275                             # DW_AT_type
-	.byte	5                               # Abbrev [5] 0x69:0x5 DW_TAG_template_type_parameter
 	.long	280                             # DW_AT_type
+	.byte	5                               # Abbrev [5] 0x69:0x5 DW_TAG_template_type_parameter
+	.long	285                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x6e:0x5 DW_TAG_template_type_parameter
-	.long	286                             # DW_AT_type
+	.long	290                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x73:0x5 DW_TAG_template_type_parameter
-	.long	300                             # DW_AT_type
+	.long	296                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x78:0x5 DW_TAG_template_type_parameter
-	.long	326                             # DW_AT_type
+	.long	310                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x7d:0x5 DW_TAG_template_type_parameter
-	.long	367                             # DW_AT_type
+	.long	336                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x82:0x5 DW_TAG_template_type_parameter
-	.long	372                             # DW_AT_type
+	.long	377                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x87:0x5 DW_TAG_template_type_parameter
-	.long	396                             # DW_AT_type
+	.long	382                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x8c:0x5 DW_TAG_template_type_parameter
-	.long	401                             # DW_AT_type
+	.long	406                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x91:0x5 DW_TAG_template_type_parameter
-	.long	418                             # DW_AT_type
+	.long	411                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x96:0x5 DW_TAG_template_type_parameter
-	.long	423                             # DW_AT_type
+	.long	428                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x9b:0x5 DW_TAG_template_type_parameter
-	.long	430                             # DW_AT_type
+	.long	433                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xa0:0x5 DW_TAG_template_type_parameter
-	.long	442                             # DW_AT_type
+	.long	440                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xa5:0x5 DW_TAG_template_type_parameter
-	.long	464                             # DW_AT_type
+	.long	452                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xaa:0x5 DW_TAG_template_type_parameter
-	.long	475                             # DW_AT_type
+	.long	474                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xaf:0x5 DW_TAG_template_type_parameter
-	.long	480                             # DW_AT_type
+	.long	485                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xb4:0x5 DW_TAG_template_type_parameter
-	.long	486                             # DW_AT_type
+	.long	490                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xb9:0x5 DW_TAG_template_type_parameter
-	.long	497                             # DW_AT_type
+	.long	496                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xbe:0x5 DW_TAG_template_type_parameter
-	.long	509                             # DW_AT_type
+	.long	507                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xc3:0x5 DW_TAG_template_type_parameter
-	.long	544                             # DW_AT_type
+	.long	519                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xc8:0x5 DW_TAG_template_type_parameter
-	.long	550                             # DW_AT_type
+	.long	554                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xcd:0x5 DW_TAG_template_type_parameter
-	.long	555                             # DW_AT_type
+	.long	560                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xd2:0x5 DW_TAG_template_type_parameter
-	.long	567                             # DW_AT_type
+	.long	565                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xd7:0x5 DW_TAG_template_type_parameter
-	.long	572                             # DW_AT_type
+	.long	577                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xdc:0x5 DW_TAG_template_type_parameter
-	.long	581                             # DW_AT_type
+	.long	582                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xe1:0x5 DW_TAG_template_type_parameter
-	.long	587                             # DW_AT_type
+	.long	591                             # DW_AT_type
+	.byte	5                               # Abbrev [5] 0xe6:0x5 DW_TAG_template_type_parameter
+	.long	597                             # DW_AT_type
 	.byte	0                               # End Of Children Mark
 	.byte	0                               # End Of Children Mark
-	.byte	6                               # Abbrev [6] 0xe8:0x7 DW_TAG_base_type
+	.byte	6                               # Abbrev [6] 0xed: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] 0xef:0x5 DW_TAG_reference_type
-	.long	232                             # DW_AT_type
-	.byte	8                               # Abbrev [8] 0xf4:0x5 DW_TAG_rvalue_reference_type
-	.long	232                             # DW_AT_type
-	.byte	9                               # Abbrev [9] 0xf9:0x5 DW_TAG_pointer_type
-	.long	232                             # DW_AT_type
-	.byte	9                               # Abbrev [9] 0xfe:0x5 DW_TAG_pointer_type
-	.long	259                             # DW_AT_type
-	.byte	10                              # Abbrev [10] 0x103:0x5 DW_TAG_const_type
-	.long	264                             # DW_AT_type
-	.byte	9                               # Abbrev [9] 0x108:0x5 DW_TAG_pointer_type
+	.byte	7                               # Abbrev [7] 0xf4:0x5 DW_TAG_unspecified_type
+	.long	.Linfo_string6                  # DW_AT_name
+	.byte	8                               # Abbrev [8] 0xf9:0x5 DW_TAG_reference_type
+	.long	237                             # DW_AT_type
+	.byte	9                               # Abbrev [9] 0xfe:0x5 DW_TAG_rvalue_reference_type
+	.long	237                             # DW_AT_type
+	.byte	10                              # Abbrev [10] 0x103:0x5 DW_TAG_pointer_type
+	.long	237                             # DW_AT_type
+	.byte	10                              # Abbrev [10] 0x108:0x5 DW_TAG_pointer_type
 	.long	269                             # DW_AT_type
-	.byte	11                              # Abbrev [11] 0x10d:0x1 DW_TAG_const_type
-	.byte	10                              # Abbrev [10] 0x10e:0x5 DW_TAG_const_type
-	.long	275                             # DW_AT_type
-	.byte	12                              # Abbrev [12] 0x113:0x5 DW_TAG_volatile_type
-	.long	249                             # DW_AT_type
-	.byte	10                              # Abbrev [10] 0x118:0x5 DW_TAG_const_type
+	.byte	11                              # Abbrev [11] 0x10d:0x5 DW_TAG_const_type
+	.long	274                             # DW_AT_type
+	.byte	10                              # Abbrev [10] 0x112:0x5 DW_TAG_pointer_type
+	.long	279                             # DW_AT_type
+	.byte	12                              # Abbrev [12] 0x117:0x1 DW_TAG_const_type
+	.byte	11                              # Abbrev [11] 0x118:0x5 DW_TAG_const_type
 	.long	285                             # DW_AT_type
-	.byte	13                              # Abbrev [13] 0x11d:0x1 DW_TAG_pointer_type
-	.byte	14                              # Abbrev [14] 0x11e:0x9 DW_TAG_ptr_to_member_type
-	.long	232                             # DW_AT_type
-	.long	295                             # DW_AT_containing_type
-	.byte	15                              # Abbrev [15] 0x127:0x5 DW_TAG_structure_type
-	.long	.Linfo_string6                  # DW_AT_name
+	.byte	13                              # Abbrev [13] 0x11d:0x5 DW_TAG_volatile_type
+	.long	259                             # DW_AT_type
+	.byte	11                              # Abbrev [11] 0x122:0x5 DW_TAG_const_type
+	.long	295                             # DW_AT_type
+	.byte	14                              # Abbrev [14] 0x127:0x1 DW_TAG_pointer_type
+	.byte	15                              # Abbrev [15] 0x128:0x9 DW_TAG_ptr_to_member_type
+	.long	237                             # DW_AT_type
+	.long	305                             # DW_AT_containing_type
+	.byte	16                              # Abbrev [16] 0x131:0x5 DW_TAG_structure_type
+	.long	.Linfo_string7                  # DW_AT_name
                                         # DW_AT_declaration
-	.byte	14                              # Abbrev [14] 0x12c:0x9 DW_TAG_ptr_to_member_type
-	.long	309                             # DW_AT_type
-	.long	295                             # DW_AT_containing_type
-	.byte	16                              # Abbrev [16] 0x135:0xc DW_TAG_subroutine_type
-	.byte	17                              # Abbrev [17] 0x136:0x5 DW_TAG_formal_parameter
-	.long	321                             # DW_AT_type
+	.byte	15                              # Abbrev [15] 0x136:0x9 DW_TAG_ptr_to_member_type
+	.long	319                             # DW_AT_type
+	.long	305                             # DW_AT_containing_type
+	.byte	17                              # Abbrev [17] 0x13f:0xc DW_TAG_subroutine_type
+	.byte	18                              # Abbrev [18] 0x140:0x5 DW_TAG_formal_parameter
+	.long	331                             # DW_AT_type
                                         # DW_AT_artificial
-	.byte	18                              # Abbrev [18] 0x13b:0x5 DW_TAG_formal_parameter
-	.long	232                             # DW_AT_type
+	.byte	19                              # Abbrev [19] 0x145:0x5 DW_TAG_formal_parameter
+	.long	237                             # DW_AT_type
 	.byte	0                               # End Of Children Mark
-	.byte	9                               # Abbrev [9] 0x141:0x5 DW_TAG_pointer_type
-	.long	295                             # DW_AT_type
-	.byte	7                               # Abbrev [7] 0x146:0x5 DW_TAG_reference_type
-	.long	331                             # DW_AT_type
-	.byte	10                              # Abbrev [10] 0x14b:0x5 DW_TAG_const_type
-	.long	336                             # DW_AT_type
-	.byte	14                              # Abbrev [14] 0x150:0x9 DW_TAG_ptr_to_member_type
-	.long	345                             # DW_AT_type
-	.long	295                             # DW_AT_containing_type
-	.byte	19                              # Abbrev [19] 0x159:0x7 DW_TAG_subroutine_type
+	.byte	10                              # Abbrev [10] 0x14b:0x5 DW_TAG_pointer_type
+	.long	305                             # DW_AT_type
+	.byte	8                               # Abbrev [8] 0x150:0x5 DW_TAG_reference_type
+	.long	341                             # DW_AT_type
+	.byte	11                              # Abbrev [11] 0x155:0x5 DW_TAG_const_type
+	.long	346                             # DW_AT_type
+	.byte	15                              # Abbrev [15] 0x15a:0x9 DW_TAG_ptr_to_member_type
+	.long	355                             # DW_AT_type
+	.long	305                             # DW_AT_containing_type
+	.byte	20                              # Abbrev [20] 0x163:0x7 DW_TAG_subroutine_type
                                         # DW_AT_rvalue_reference
-	.byte	17                              # Abbrev [17] 0x15a:0x5 DW_TAG_formal_parameter
-	.long	352                             # DW_AT_type
+	.byte	18                              # Abbrev [18] 0x164:0x5 DW_TAG_formal_parameter
+	.long	362                             # DW_AT_type
                                         # DW_AT_artificial
 	.byte	0                               # End Of Children Mark
-	.byte	9                               # Abbrev [9] 0x160:0x5 DW_TAG_pointer_type
-	.long	357                             # DW_AT_type
-	.byte	10                              # Abbrev [10] 0x165:0x5 DW_TAG_const_type
-	.long	362                             # DW_AT_type
-	.byte	12                              # Abbrev [12] 0x16a:0x5 DW_TAG_volatile_type
-	.long	295                             # DW_AT_type
-	.byte	7                               # Abbrev [7] 0x16f:0x5 DW_TAG_reference_type
+	.byte	10                              # Abbrev [10] 0x16a:0x5 DW_TAG_pointer_type
+	.long	367                             # DW_AT_type
+	.byte	11                              # Abbrev [11] 0x16f:0x5 DW_TAG_const_type
 	.long	372                             # DW_AT_type
-	.byte	10                              # Abbrev [10] 0x174:0x5 DW_TAG_const_type
-	.long	377                             # DW_AT_type
-	.byte	20                              # Abbrev [20] 0x179:0xc DW_TAG_array_type
-	.long	249                             # DW_AT_type
-	.byte	21                              # Abbrev [21] 0x17e:0x6 DW_TAG_subrange_type
-	.long	389                             # DW_AT_type
+	.byte	13                              # Abbrev [13] 0x174:0x5 DW_TAG_volatile_type
+	.long	305                             # DW_AT_type
+	.byte	8                               # Abbrev [8] 0x179:0x5 DW_TAG_reference_type
+	.long	382                             # DW_AT_type
+	.byte	11                              # Abbrev [11] 0x17e:0x5 DW_TAG_const_type
+	.long	387                             # DW_AT_type
+	.byte	21                              # Abbrev [21] 0x183:0xc DW_TAG_array_type
+	.long	259                             # DW_AT_type
+	.byte	22                              # Abbrev [22] 0x188:0x6 DW_TAG_subrange_type
+	.long	399                             # DW_AT_type
 	.byte	1                               # DW_AT_count
 	.byte	0                               # End Of Children Mark
-	.byte	22                              # Abbrev [22] 0x185:0x7 DW_TAG_base_type
-	.long	.Linfo_string7                  # DW_AT_name
+	.byte	23                              # Abbrev [23] 0x18f:0x7 DW_TAG_base_type
+	.long	.Linfo_string8                  # DW_AT_name
 	.byte	8                               # DW_AT_byte_size
 	.byte	7                               # DW_AT_encoding
-	.byte	7                               # Abbrev [7] 0x18c:0x5 DW_TAG_reference_type
-	.long	401                             # DW_AT_type
-	.byte	10                              # Abbrev [10] 0x191:0x5 DW_TAG_const_type
-	.long	406                             # DW_AT_type
-	.byte	20                              # Abbrev [20] 0x196:0xc DW_TAG_array_type
-	.long	232                             # DW_AT_type
-	.byte	21                              # Abbrev [21] 0x19b:0x6 DW_TAG_subrange_type
-	.long	389                             # DW_AT_type
+	.byte	8                               # Abbrev [8] 0x196:0x5 DW_TAG_reference_type
+	.long	411                             # DW_AT_type
+	.byte	11                              # Abbrev [11] 0x19b:0x5 DW_TAG_const_type
+	.long	416                             # DW_AT_type
+	.byte	21                              # Abbrev [21] 0x1a0:0xc DW_TAG_array_type
+	.long	237                             # DW_AT_type
+	.byte	22                              # Abbrev [22] 0x1a5:0x6 DW_TAG_subrange_type
+	.long	399                             # DW_AT_type
 	.byte	1                               # DW_AT_count
 	.byte	0                               # End Of Children Mark
-	.byte	23                              # Abbrev [23] 0x1a2:0x5 DW_TAG_subroutine_type
-	.long	232                             # DW_AT_type
-	.byte	16                              # Abbrev [16] 0x1a7:0x7 DW_TAG_subroutine_type
-	.byte	18                              # Abbrev [18] 0x1a8:0x5 DW_TAG_formal_parameter
-	.long	232                             # DW_AT_type
-	.byte	0                               # End Of Children Mark
-	.byte	16                              # Abbrev [16] 0x1ae:0xc DW_TAG_subroutine_type
-	.byte	18                              # Abbrev [18] 0x1af:0x5 DW_TAG_formal_parameter
-	.long	232                             # DW_AT_type
-	.byte	18                              # Abbrev [18] 0x1b4:0x5 DW_TAG_formal_parameter
-	.long	232                             # DW_AT_type
+	.byte	24                              # Abbrev [24] 0x1ac:0x5 DW_TAG_subroutine_type
+	.long	237                             # DW_AT_type
+	.byte	17                              # Abbrev [17] 0x1b1:0x7 DW_TAG_subroutine_type
+	.byte	19                              # Abbrev [19] 0x1b2:0x5 DW_TAG_formal_parameter
+	.long	237                             # DW_AT_type
 	.byte	0                               # End Of Children Mark
-	.byte	9                               # Abbrev [9] 0x1ba:0x5 DW_TAG_pointer_type
-	.long	447                             # DW_AT_type
-	.byte	16                              # Abbrev [16] 0x1bf:0xc DW_TAG_subroutine_type
-	.byte	18                              # Abbrev [18] 0x1c0:0x5 DW_TAG_formal_parameter
-	.long	459                             # DW_AT_type
-	.byte	18                              # Abbrev [18] 0x1c5:0x5 DW_TAG_formal_parameter
-	.long	232                             # DW_AT_type
+	.byte	17                              # Abbrev [17] 0x1b8:0xc DW_TAG_subroutine_type
+	.byte	19                              # Abbrev [19] 0x1b9:0x5 DW_TAG_formal_parameter
+	.long	237                             # DW_AT_type
+	.byte	19                              # Abbrev [19] 0x1be:0x5 DW_TAG_formal_parameter
+	.long	237                             # DW_AT_type
 	.byte	0                               # End Of Children Mark
-	.byte	9                               # Abbrev [9] 0x1cb:0x5 DW_TAG_pointer_type
-	.long	295                             # DW_AT_type
-	.byte	10                              # Abbrev [10] 0x1d0:0x5 DW_TAG_const_type
+	.byte	10                              # Abbrev [10] 0x1c4:0x5 DW_TAG_pointer_type
+	.long	457                             # DW_AT_type
+	.byte	17                              # Abbrev [17] 0x1c9:0xc DW_TAG_subroutine_type
+	.byte	19                              # Abbrev [19] 0x1ca:0x5 DW_TAG_formal_parameter
 	.long	469                             # DW_AT_type
-	.byte	9                               # Abbrev [9] 0x1d5:0x5 DW_TAG_pointer_type
-	.long	474                             # DW_AT_type
-	.byte	24                              # Abbrev [24] 0x1da:0x1 DW_TAG_subroutine_type
-	.byte	10                              # Abbrev [10] 0x1db:0x5 DW_TAG_const_type
-	.long	474                             # DW_AT_type
-	.byte	12                              # Abbrev [12] 0x1e0:0x5 DW_TAG_volatile_type
-	.long	485                             # DW_AT_type
-	.byte	25                              # Abbrev [25] 0x1e5:0x1 DW_TAG_subroutine_type
+	.byte	19                              # Abbrev [19] 0x1cf:0x5 DW_TAG_formal_parameter
+	.long	237                             # DW_AT_type
+	.byte	0                               # End Of Children Mark
+	.byte	10                              # Abbrev [10] 0x1d5:0x5 DW_TAG_pointer_type
+	.long	305                             # DW_AT_type
+	.byte	11                              # Abbrev [11] 0x1da:0x5 DW_TAG_const_type
+	.long	479                             # DW_AT_type
+	.byte	10                              # Abbrev [10] 0x1df:0x5 DW_TAG_pointer_type
+	.long	484                             # DW_AT_type
+	.byte	25                              # Abbrev [25] 0x1e4:0x1 DW_TAG_subroutine_type
+	.byte	11                              # Abbrev [11] 0x1e5:0x5 DW_TAG_const_type
+	.long	484                             # DW_AT_type
+	.byte	13                              # Abbrev [13] 0x1ea:0x5 DW_TAG_volatile_type
+	.long	495                             # DW_AT_type
+	.byte	26                              # Abbrev [26] 0x1ef:0x1 DW_TAG_subroutine_type
                                         # DW_AT_rvalue_reference
-	.byte	10                              # Abbrev [10] 0x1e6:0x5 DW_TAG_const_type
-	.long	491                             # DW_AT_type
-	.byte	12                              # Abbrev [12] 0x1eb:0x5 DW_TAG_volatile_type
-	.long	496                             # DW_AT_type
-	.byte	26                              # Abbrev [26] 0x1f0:0x1 DW_TAG_subroutine_type
+	.byte	11                              # Abbrev [11] 0x1f0:0x5 DW_TAG_const_type
+	.long	501                             # DW_AT_type
+	.byte	13                              # Abbrev [13] 0x1f5:0x5 DW_TAG_volatile_type
+	.long	506                             # DW_AT_type
+	.byte	27                              # Abbrev [27] 0x1fa:0x1 DW_TAG_subroutine_type
                                         # DW_AT_reference
-	.byte	16                              # Abbrev [16] 0x1f1:0x7 DW_TAG_subroutine_type
-	.byte	18                              # Abbrev [18] 0x1f2:0x5 DW_TAG_formal_parameter
-	.long	504                             # DW_AT_type
+	.byte	17                              # Abbrev [17] 0x1fb:0x7 DW_TAG_subroutine_type
+	.byte	19                              # Abbrev [19] 0x1fc:0x5 DW_TAG_formal_parameter
+	.long	514                             # DW_AT_type
 	.byte	0                               # End Of Children Mark
-	.byte	9                               # Abbrev [9] 0x1f8:0x5 DW_TAG_pointer_type
-	.long	357                             # DW_AT_type
-	.byte	27                              # Abbrev [27] 0x1fd:0xb DW_TAG_subroutine_type
-	.long	520                             # DW_AT_type
-	.byte	18                              # Abbrev [18] 0x202:0x5 DW_TAG_formal_parameter
-	.long	232                             # DW_AT_type
+	.byte	10                              # Abbrev [10] 0x202:0x5 DW_TAG_pointer_type
+	.long	367                             # DW_AT_type
+	.byte	28                              # Abbrev [28] 0x207:0xb DW_TAG_subroutine_type
+	.long	530                             # DW_AT_type
+	.byte	19                              # Abbrev [19] 0x20c:0x5 DW_TAG_formal_parameter
+	.long	237                             # DW_AT_type
 	.byte	0                               # End Of Children Mark
-	.byte	9                               # Abbrev [9] 0x208:0x5 DW_TAG_pointer_type
-	.long	525                             # DW_AT_type
-	.byte	16                              # Abbrev [16] 0x20d:0x7 DW_TAG_subroutine_type
-	.byte	18                              # Abbrev [18] 0x20e:0x5 DW_TAG_formal_parameter
-	.long	532                             # DW_AT_type
+	.byte	10                              # Abbrev [10] 0x212:0x5 DW_TAG_pointer_type
+	.long	535                             # DW_AT_type
+	.byte	17                              # Abbrev [17] 0x217:0x7 DW_TAG_subroutine_type
+	.byte	19                              # Abbrev [19] 0x218:0x5 DW_TAG_formal_parameter
+	.long	542                             # DW_AT_type
 	.byte	0                               # End Of Children Mark
-	.byte	6                               # Abbrev [6] 0x214:0x7 DW_TAG_base_type
-	.long	.Linfo_string8                  # DW_AT_name
+	.byte	6                               # Abbrev [6] 0x21e:0x7 DW_TAG_base_type
+	.long	.Linfo_string9                  # DW_AT_name
 	.byte	4                               # DW_AT_encoding
 	.byte	4                               # DW_AT_byte_size
-	.byte	28                              # Abbrev [28] 0x21b:0xb DW_TAG_namespace
-	.long	.Linfo_string9                  # DW_AT_name
-	.byte	15                              # Abbrev [15] 0x220:0x5 DW_TAG_structure_type
+	.byte	29                              # Abbrev [29] 0x225:0xb DW_TAG_namespace
 	.long	.Linfo_string10                 # DW_AT_name
+	.byte	16                              # Abbrev [16] 0x22a:0x5 DW_TAG_structure_type
+	.long	.Linfo_string11                 # DW_AT_name
                                         # DW_AT_declaration
 	.byte	0                               # End Of Children Mark
-	.byte	23                              # Abbrev [23] 0x226:0x5 DW_TAG_subroutine_type
-	.long	544                             # DW_AT_type
-	.byte	20                              # Abbrev [20] 0x22b:0xc DW_TAG_array_type
-	.long	544                             # DW_AT_type
-	.byte	21                              # Abbrev [21] 0x230:0x6 DW_TAG_subrange_type
-	.long	389                             # DW_AT_type
+	.byte	24                              # Abbrev [24] 0x230:0x5 DW_TAG_subroutine_type
+	.long	554                             # DW_AT_type
+	.byte	21                              # Abbrev [21] 0x235:0xc DW_TAG_array_type
+	.long	554                             # DW_AT_type
+	.byte	22                              # Abbrev [22] 0x23a:0x6 DW_TAG_subrange_type
+	.long	399                             # DW_AT_type
 	.byte	1                               # DW_AT_count
 	.byte	0                               # End Of Children Mark
-	.byte	9                               # Abbrev [9] 0x237:0x5 DW_TAG_pointer_type
-	.long	544                             # DW_AT_type
-	.byte	14                              # Abbrev [14] 0x23c:0x9 DW_TAG_ptr_to_member_type
-	.long	544                             # DW_AT_type
-	.long	544                             # DW_AT_containing_type
-	.byte	10                              # Abbrev [10] 0x245:0x5 DW_TAG_const_type
-	.long	544                             # DW_AT_type
-	.byte	29                              # Abbrev [29] 0x24a:0x7 DW_TAG_namespace
-	.byte	15                              # Abbrev [15] 0x24b:0x5 DW_TAG_structure_type
-	.long	.Linfo_string11                 # DW_AT_name
+	.byte	10                              # Abbrev [10] 0x241:0x5 DW_TAG_pointer_type
+	.long	554                             # DW_AT_type
+	.byte	15                              # Abbrev [15] 0x246:0x9 DW_TAG_ptr_to_member_type
+	.long	554                             # DW_AT_type
+	.long	554                             # DW_AT_containing_type
+	.byte	11                              # Abbrev [11] 0x24f:0x5 DW_TAG_const_type
+	.long	554                             # DW_AT_type
+	.byte	30                              # Abbrev [30] 0x254:0x7 DW_TAG_namespace
+	.byte	16                              # Abbrev [16] 0x255:0x5 DW_TAG_structure_type
+	.long	.Linfo_string12                 # DW_AT_name
                                         # DW_AT_declaration
 	.byte	0                               # End Of Children Mark
 	.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 51eba07e98b79a47d54e4fb36a3812cf3c91c667)" # string offset=0
+	.asciz	"clang version 14.0.0 (git at github.com:llvm/llvm-project.git 3d6f4552349be047bc0e631733f3deaf311ea17b)" # string offset=0
 .Linfo_string1:
 	.asciz	"test.cpp"                      # string offset=101
 .Linfo_string2:
@@ -620,20 +637,22 @@
 .Linfo_string5:
 	.asciz	"int"                           # string offset=159
 .Linfo_string6:
-	.asciz	"foo"                           # string offset=163
+	.asciz	"decltype(nullptr)"             # string offset=163
 .Linfo_string7:
-	.asciz	"__ARRAY_SIZE_TYPE__"           # string offset=167
+	.asciz	"foo"                           # string offset=181
 .Linfo_string8:
-	.asciz	"float"                         # string offset=187
+	.asciz	"__ARRAY_SIZE_TYPE__"           # string offset=185
 .Linfo_string9:
-	.asciz	"ns"                            # string offset=193
+	.asciz	"float"                         # string offset=205
 .Linfo_string10:
-	.asciz	"inner"                         # string offset=196
+	.asciz	"ns"                            # string offset=211
 .Linfo_string11:
-	.asciz	"anon_ns_mem"                   # string offset=202
+	.asciz	"inner"                         # string offset=214
 .Linfo_string12:
-	.asciz	"t1"                            # string offset=214
-	.ident	"clang version 14.0.0 (git at github.com:llvm/llvm-project.git 51eba07e98b79a47d54e4fb36a3812cf3c91c667)"
+	.asciz	"anon_ns_mem"                   # string offset=220
+.Linfo_string13:
+	.asciz	"t1"                            # string offset=232
+	.ident	"clang version 14.0.0 (git at github.com:llvm/llvm-project.git 3d6f4552349be047bc0e631733f3deaf311ea17b)"
 	.section	".note.GNU-stack","", at progbits
 	.addrsig
 	.addrsig_sym v1


        


More information about the llvm-commits mailing list