llvm-dwarfdump: support for type printing "decltype(nullptr)" as "nullptr_t"
authorDavid Blaikie <dblaikie@gmail.com>
Mon, 20 Sep 2021 00:33:56 +0000 (17:33 -0700)
committerDavid Blaikie <dblaikie@gmail.com>
Mon, 20 Sep 2021 00:33:56 +0000 (17:33 -0700)
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.

llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
llvm/test/tools/llvm-dwarfdump/X86/prettyprint_types.s

index 1f16158..60adc90 100644 (file)
@@ -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;
index 6e07276..89cadff 100644 (file)
 # 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 &"
 
        .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                                 # 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
        .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
        .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
        .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
        .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
        .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)
        .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
        .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",@progbits,1
 .Linfo_string0:
-       .asciz  "clang version 14.0.0 (git@github.com:llvm/llvm-project.git 51eba07e98b79a47d54e4fb36a3812cf3c91c667)" # string offset=0
+       .asciz  "clang version 14.0.0 (git@github.com:llvm/llvm-project.git 3d6f4552349be047bc0e631733f3deaf311ea17b)" # string offset=0
 .Linfo_string1:
        .asciz  "test.cpp"                      # string offset=101
 .Linfo_string2:
 .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@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@github.com:llvm/llvm-project.git 3d6f4552349be047bc0e631733f3deaf311ea17b)"
        .section        ".note.GNU-stack","",@progbits
        .addrsig
        .addrsig_sym v1