[llvm] 5bfe520 - llvm-dwarfdump: Pretty print names qualified/with scopes

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Sun Sep 19 16:36:38 PDT 2021


Author: David Blaikie
Date: 2021-09-19T16:36:01-07:00
New Revision: 5bfe5207ef283194a76616e5693a67a14c158ae3

URL: https://github.com/llvm/llvm-project/commit/5bfe5207ef283194a76616e5693a67a14c158ae3
DIFF: https://github.com/llvm/llvm-project/commit/5bfe5207ef283194a76616e5693a67a14c158ae3.diff

LOG: llvm-dwarfdump: Pretty print names qualified/with scopes

Added: 
    

Modified: 
    llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
    llvm/test/DebugInfo/X86/addr-tu-to-non-tu.ll
    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 075ce40dd7eb4..fe7377b080271 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFDie.cpp
@@ -186,7 +186,7 @@ struct DWARFTypePrinter {
   }
 
   void appendPointerLikeTypeBefore(DWARFDie D, DWARFDie Inner, StringRef Ptr) {
-    appendUnqualifiedNameBefore(Inner);
+    appendQualifiedNameBefore(Inner);
     if (Word)
       OS << ' ';
     if (needsParens(Inner))
@@ -214,7 +214,7 @@ struct DWARFTypePrinter {
       break;
     }
     case DW_TAG_subroutine_type: {
-      appendUnqualifiedNameBefore(Inner);
+      appendQualifiedNameBefore(Inner);
       if (Word) {
         OS << ' ';
       }
@@ -222,7 +222,7 @@ struct DWARFTypePrinter {
       break;
     }
     case DW_TAG_array_type: {
-      appendUnqualifiedNameBefore(Inner);
+      appendQualifiedNameBefore(Inner);
       if (Word)
         OS << ' ';
       Word = false;
@@ -235,14 +235,14 @@ struct DWARFTypePrinter {
       appendPointerLikeTypeBefore(D, Inner, "&&");
       break;
     case DW_TAG_ptr_to_member_type: {
-      appendUnqualifiedNameBefore(Inner);
+      appendQualifiedNameBefore(Inner);
       if (needsParens(Inner))
         OS << '(';
       else if (Word)
         OS << ' ';
       if (DWARFDie Cont =
               D.getAttributeValueAsReferencedDie(DW_AT_containing_type)) {
-        appendUnqualifiedName(Cont);
+        appendQualifiedName(Cont);
         OS << "::";
       }
       OS << "*";
@@ -253,9 +253,16 @@ struct DWARFTypePrinter {
     case DW_TAG_volatile_type:
       appendConstVolatileQualifierBefore(D);
       break;
+    case DW_TAG_namespace: {
+      if (const char *Name = dwarf::toString(D.find(DW_AT_name), nullptr))
+        OS << Name;
+      else
+        OS << "(anonymous namespace)";
+      break;
+    }
     default:
       appendTypeTagName(T);
-      appendUnqualifiedNameBefore(Inner);
+      appendQualifiedNameBefore(Inner);
       break;
     }
     return Inner;
@@ -296,6 +303,16 @@ struct DWARFTypePrinter {
     }
   }
 
+  void appendQualifiedName(DWARFDie D) {
+    if (D)
+      appendScopes(D.getParent());
+    appendUnqualifiedName(D);
+  }
+  DWARFDie appendQualifiedNameBefore(DWARFDie D) {
+    if (D)
+      appendScopes(D.getParent());
+    return appendUnqualifiedNameBefore(D);
+  }
   void decomposeConstVolatile(DWARFDie &N, DWARFDie &T, DWARFDie &C,
                               DWARFDie &V) {
     (N.getTag() == DW_TAG_const_type ? C : V) = N;
@@ -343,7 +360,7 @@ struct DWARFTypePrinter {
       if (V)
         OS << "volatile ";
     }
-    appendUnqualifiedNameBefore(T);
+    appendQualifiedNameBefore(T);
     if (!Leading && !Subroutine) {
       Word = true;
       if (C)
@@ -429,6 +446,20 @@ struct DWARFTypePrinter {
     appendUnqualifiedNameAfter(
         Inner, Inner.getAttributeValueAsReferencedDie(DW_AT_type));
   }
+  void appendScopes(DWARFDie D) {
+    if (D.getTag() == DW_TAG_compile_unit)
+      return;
+    if (D.getTag() == DW_TAG_type_unit)
+      return;
+    if (D.getTag() == llvm::dwarf::DW_TAG_skeleton_unit)
+      return;
+    if (D.getTag() == DW_TAG_subprogram)
+      return;
+    if (DWARFDie P = D.getParent())
+      appendScopes(P);
+    appendUnqualifiedName(D);
+    OS << "::";
+  }
 };
 } // anonymous namespace
 
@@ -516,7 +547,7 @@ static void dumpAttribute(raw_ostream &OS, const DWARFDie &Die,
       OS << Space << "\"" << Name << '\"';
   } else if (Attr == DW_AT_type) {
     OS << Space << "\"";
-    DWARFTypePrinter(OS).appendUnqualifiedName(
+    DWARFTypePrinter(OS).appendQualifiedName(
         Die.getAttributeValueAsReferencedDie(FormValue));
     OS << '"';
   } else if (Attr == DW_AT_APPLE_property_attribute) {

diff  --git a/llvm/test/DebugInfo/X86/addr-tu-to-non-tu.ll b/llvm/test/DebugInfo/X86/addr-tu-to-non-tu.ll
index e81cb38c2131b..29c4cfb6de811 100644
--- a/llvm/test/DebugInfo/X86/addr-tu-to-non-tu.ll
+++ b/llvm/test/DebugInfo/X86/addr-tu-to-non-tu.ll
@@ -47,7 +47,7 @@
 ; CHECK:   DW_AT_name ("t2<&foo>")
 ; CHECK:   DW_TAG_member
 ; CHECK:     DW_AT_name    ("v1")
-; CHECK:     DW_AT_type    ([[T1]] "t1")
+; CHECK:     DW_AT_type    ([[T1]] "(anonymous namespace)::t1")
 
 ; CHECK: .debug_types contents:
 

diff  --git a/llvm/test/tools/llvm-dwarfdump/X86/prettyprint_types.s b/llvm/test/tools/llvm-dwarfdump/X86/prettyprint_types.s
index 14ebd24856fe1..6e07276dbb19f 100644
--- a/llvm/test/tools/llvm-dwarfdump/X86/prettyprint_types.s
+++ b/llvm/test/tools/llvm-dwarfdump/X86/prettyprint_types.s
@@ -6,6 +6,12 @@
 #  struct foo;
 #  template <typename... Ts>
 #  struct t1 {};
+#  namespace ns {
+#  struct inner { };
+#  }
+#  namespace {
+#  struct anon_ns_mem { };
+#  }
 #  t1<
 #      // base type
 #      int,
@@ -25,9 +31,18 @@
 #      // subroutine types
 #      int(), void(int), void(int, int), void (*)(foo *, int), void (*const)(),
 #      void() const, void() volatile &&, void() const volatile &,
-#      void(const volatile foo *), void (*(int))(float)>
+#      void(const volatile foo *), void (*(int))(float),
+#      // qualified types
+#      ns::inner, ns::inner(), ns::inner[1], ns::inner *, ns::inner ns::inner::*,
+#      const ns::inner, anon_ns_mem>
 #      v1;
-#
+#  // extern function to force the code to be emitted - otherwise v1 (having
+#  // internal linkage due to being of a type instantiated with an internal
+#  // linkage type) would be optimized away as unused.
+#  __attribute__((nodebug)) void*f2() {
+#    return &v1;
+#  }
+# 
 # With the name of the "t1<...>" type renamed to "t1" (or using
 # -gsimple-template-names) to make it easy to query for.
 # Note that the llvm-dwarfdump command uses --name=t1 --show-children to only
@@ -77,6 +92,15 @@
 # CHECK:   DW_AT_type{{.*}}"void (const volatile foo *)")
 # CHECK:   DW_AT_type{{.*}}"void (*(int))(float)")
 
+# qualified types
+# CHECK:   DW_AT_type{{.*}}"ns::inner"
+# CHECK:   DW_AT_type{{.*}}"ns::inner ()"
+# CHECK:   DW_AT_type{{.*}}"ns::inner [1]"
+# CHECK:   DW_AT_type{{.*}}"ns::inner *"
+# CHECK:   DW_AT_type{{.*}}"ns::inner ns::inner::*"
+# CHECK:   DW_AT_type{{.*}}"const ns::inner"
+# CHECK:   DW_AT_type{{.*}}"(anonymous namespace)::anon_ns_mem"
+
 	.section	.debug_abbrev,"", at progbits
 	.byte	1                               # Abbreviation Code
 	.byte	17                              # DW_TAG_compile_unit
@@ -100,8 +124,6 @@
 	.byte	14                              # DW_FORM_strp
 	.byte	73                              # DW_AT_type
 	.byte	19                              # DW_FORM_ref4
-	.byte	63                              # DW_AT_external
-	.byte	25                              # DW_FORM_flag_present
 	.byte	58                              # DW_AT_decl_file
 	.byte	11                              # DW_FORM_data1
 	.byte	59                              # DW_AT_decl_line
@@ -301,6 +323,18 @@
 	.byte	19                              # DW_FORM_ref4
 	.byte	0                               # EOM(1)
 	.byte	0                               # EOM(2)
+	.byte	28                              # 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	57                              # DW_TAG_namespace
+	.byte	1                               # DW_CHILDREN_yes
+	.byte	0                               # EOM(1)
+	.byte	0                               # EOM(2)
 	.byte	0                               # EOM(3)
 	.section	.debug_info,"", at progbits
 .Lcu_begin0:
@@ -309,7 +343,7 @@
 	.short	4                               # DWARF version number
 	.long	.debug_abbrev                   # Offset Into Abbrev. Section
 	.byte	8                               # Address Size (in bytes)
-	.byte	1                               # Abbrev [1] 0xb:0x1ee DW_TAG_compile_unit
+	.byte	1                               # Abbrev [1] 0xb:0x247 DW_TAG_compile_unit
 	.long	.Linfo_string0                  # DW_AT_producer
 	.short	33                              # DW_AT_language
 	.long	.Linfo_string1                  # DW_AT_name
@@ -318,224 +352,263 @@
 	.byte	2                               # Abbrev [2] 0x1e:0x15 DW_TAG_variable
 	.long	.Linfo_string3                  # DW_AT_name
 	.long	51                              # DW_AT_type
-                                        # DW_AT_external
 	.byte	1                               # DW_AT_decl_file
-	.byte	24                              # DW_AT_decl_line
+	.byte	33                              # DW_AT_decl_line
 	.byte	9                               # DW_AT_location
 	.byte	3
 	.quad	v1
-	.byte	3                               # Abbrev [3] 0x33:0x92 DW_TAG_structure_type
+	.byte	3                               # Abbrev [3] 0x33:0xb5 DW_TAG_structure_type
 	.byte	5                               # DW_AT_calling_convention
-	.long	.Linfo_string9                  # DW_AT_name
+	.long	.Linfo_string12                 # 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:0x88 DW_TAG_GNU_template_parameter_pack
+	.byte	4                               # Abbrev [4] 0x3c:0xab DW_TAG_GNU_template_parameter_pack
 	.long	.Linfo_string4                  # DW_AT_name
 	.byte	5                               # Abbrev [5] 0x41:0x5 DW_TAG_template_type_parameter
-	.long	197                             # DW_AT_type
+	.long	232                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x46:0x5 DW_TAG_template_type_parameter
-	.long	204                             # DW_AT_type
+	.long	239                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x4b:0x5 DW_TAG_template_type_parameter
-	.long	209                             # DW_AT_type
+	.long	244                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x50:0x5 DW_TAG_template_type_parameter
-	.long	214                             # DW_AT_type
+	.long	249                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x55:0x5 DW_TAG_template_type_parameter
-	.long	219                             # DW_AT_type
+	.long	254                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x5a:0x5 DW_TAG_template_type_parameter
-	.long	224                             # DW_AT_type
+	.long	259                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x5f:0x5 DW_TAG_template_type_parameter
-	.long	235                             # DW_AT_type
+	.long	270                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x64:0x5 DW_TAG_template_type_parameter
-	.long	240                             # DW_AT_type
+	.long	275                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x69:0x5 DW_TAG_template_type_parameter
-	.long	245                             # DW_AT_type
+	.long	280                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x6e:0x5 DW_TAG_template_type_parameter
-	.long	251                             # DW_AT_type
+	.long	286                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x73:0x5 DW_TAG_template_type_parameter
-	.long	265                             # DW_AT_type
+	.long	300                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x78:0x5 DW_TAG_template_type_parameter
-	.long	291                             # DW_AT_type
+	.long	326                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x7d:0x5 DW_TAG_template_type_parameter
-	.long	332                             # DW_AT_type
+	.long	367                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x82:0x5 DW_TAG_template_type_parameter
-	.long	337                             # DW_AT_type
+	.long	372                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x87:0x5 DW_TAG_template_type_parameter
-	.long	361                             # DW_AT_type
+	.long	396                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x8c:0x5 DW_TAG_template_type_parameter
-	.long	366                             # DW_AT_type
+	.long	401                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x91:0x5 DW_TAG_template_type_parameter
-	.long	383                             # DW_AT_type
+	.long	418                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x96:0x5 DW_TAG_template_type_parameter
-	.long	388                             # DW_AT_type
+	.long	423                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0x9b:0x5 DW_TAG_template_type_parameter
-	.long	395                             # DW_AT_type
+	.long	430                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xa0:0x5 DW_TAG_template_type_parameter
-	.long	407                             # DW_AT_type
+	.long	442                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xa5:0x5 DW_TAG_template_type_parameter
-	.long	429                             # DW_AT_type
+	.long	464                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xaa:0x5 DW_TAG_template_type_parameter
-	.long	440                             # DW_AT_type
+	.long	475                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xaf:0x5 DW_TAG_template_type_parameter
-	.long	445                             # DW_AT_type
+	.long	480                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xb4:0x5 DW_TAG_template_type_parameter
-	.long	451                             # DW_AT_type
+	.long	486                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xb9:0x5 DW_TAG_template_type_parameter
-	.long	462                             # DW_AT_type
+	.long	497                             # DW_AT_type
 	.byte	5                               # Abbrev [5] 0xbe:0x5 DW_TAG_template_type_parameter
-	.long	474                             # DW_AT_type
+	.long	509                             # DW_AT_type
+	.byte	5                               # Abbrev [5] 0xc3:0x5 DW_TAG_template_type_parameter
+	.long	544                             # DW_AT_type
+	.byte	5                               # Abbrev [5] 0xc8:0x5 DW_TAG_template_type_parameter
+	.long	550                             # DW_AT_type
+	.byte	5                               # Abbrev [5] 0xcd:0x5 DW_TAG_template_type_parameter
+	.long	555                             # DW_AT_type
+	.byte	5                               # Abbrev [5] 0xd2:0x5 DW_TAG_template_type_parameter
+	.long	567                             # DW_AT_type
+	.byte	5                               # Abbrev [5] 0xd7:0x5 DW_TAG_template_type_parameter
+	.long	572                             # DW_AT_type
+	.byte	5                               # Abbrev [5] 0xdc:0x5 DW_TAG_template_type_parameter
+	.long	581                             # DW_AT_type
+	.byte	5                               # Abbrev [5] 0xe1:0x5 DW_TAG_template_type_parameter
+	.long	587                             # DW_AT_type
 	.byte	0                               # End Of Children Mark
 	.byte	0                               # End Of Children Mark
-	.byte	6                               # Abbrev [6] 0xc5:0x7 DW_TAG_base_type
+	.byte	6                               # Abbrev [6] 0xe8: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] 0xcc:0x5 DW_TAG_reference_type
-	.long	197                             # DW_AT_type
-	.byte	8                               # Abbrev [8] 0xd1:0x5 DW_TAG_rvalue_reference_type
-	.long	197                             # DW_AT_type
-	.byte	9                               # Abbrev [9] 0xd6:0x5 DW_TAG_pointer_type
-	.long	197                             # DW_AT_type
-	.byte	9                               # Abbrev [9] 0xdb:0x5 DW_TAG_pointer_type
-	.long	224                             # DW_AT_type
-	.byte	10                              # Abbrev [10] 0xe0:0x5 DW_TAG_const_type
-	.long	229                             # DW_AT_type
-	.byte	9                               # Abbrev [9] 0xe5:0x5 DW_TAG_pointer_type
-	.long	234                             # DW_AT_type
-	.byte	11                              # Abbrev [11] 0xea:0x1 DW_TAG_const_type
-	.byte	10                              # Abbrev [10] 0xeb:0x5 DW_TAG_const_type
-	.long	240                             # DW_AT_type
-	.byte	12                              # Abbrev [12] 0xf0:0x5 DW_TAG_volatile_type
-	.long	214                             # DW_AT_type
-	.byte	10                              # Abbrev [10] 0xf5:0x5 DW_TAG_const_type
-	.long	250                             # DW_AT_type
-	.byte	13                              # Abbrev [13] 0xfa:0x1 DW_TAG_pointer_type
-	.byte	14                              # Abbrev [14] 0xfb:0x9 DW_TAG_ptr_to_member_type
-	.long	197                             # DW_AT_type
-	.long	260                             # DW_AT_containing_type
-	.byte	15                              # Abbrev [15] 0x104:0x5 DW_TAG_structure_type
+	.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
+	.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
+	.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
                                         # DW_AT_declaration
-	.byte	14                              # Abbrev [14] 0x109:0x9 DW_TAG_ptr_to_member_type
-	.long	274                             # DW_AT_type
-	.long	260                             # DW_AT_containing_type
-	.byte	16                              # Abbrev [16] 0x112:0xc DW_TAG_subroutine_type
-	.byte	17                              # Abbrev [17] 0x113:0x5 DW_TAG_formal_parameter
-	.long	286                             # DW_AT_type
+	.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
                                         # DW_AT_artificial
-	.byte	18                              # Abbrev [18] 0x118:0x5 DW_TAG_formal_parameter
-	.long	197                             # DW_AT_type
+	.byte	18                              # Abbrev [18] 0x13b:0x5 DW_TAG_formal_parameter
+	.long	232                             # DW_AT_type
 	.byte	0                               # End Of Children Mark
-	.byte	9                               # Abbrev [9] 0x11e:0x5 DW_TAG_pointer_type
-	.long	260                             # DW_AT_type
-	.byte	7                               # Abbrev [7] 0x123:0x5 DW_TAG_reference_type
-	.long	296                             # DW_AT_type
-	.byte	10                              # Abbrev [10] 0x128:0x5 DW_TAG_const_type
-	.long	301                             # DW_AT_type
-	.byte	14                              # Abbrev [14] 0x12d:0x9 DW_TAG_ptr_to_member_type
-	.long	310                             # DW_AT_type
-	.long	260                             # DW_AT_containing_type
-	.byte	19                              # Abbrev [19] 0x136:0x7 DW_TAG_subroutine_type
+	.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
                                         # DW_AT_rvalue_reference
-	.byte	17                              # Abbrev [17] 0x137:0x5 DW_TAG_formal_parameter
-	.long	317                             # DW_AT_type
+	.byte	17                              # Abbrev [17] 0x15a:0x5 DW_TAG_formal_parameter
+	.long	352                             # DW_AT_type
                                         # DW_AT_artificial
 	.byte	0                               # End Of Children Mark
-	.byte	9                               # Abbrev [9] 0x13d:0x5 DW_TAG_pointer_type
-	.long	322                             # DW_AT_type
-	.byte	10                              # Abbrev [10] 0x142:0x5 DW_TAG_const_type
-	.long	327                             # DW_AT_type
-	.byte	12                              # Abbrev [12] 0x147:0x5 DW_TAG_volatile_type
-	.long	260                             # DW_AT_type
-	.byte	7                               # Abbrev [7] 0x14c:0x5 DW_TAG_reference_type
-	.long	337                             # DW_AT_type
-	.byte	10                              # Abbrev [10] 0x151:0x5 DW_TAG_const_type
-	.long	342                             # DW_AT_type
-	.byte	20                              # Abbrev [20] 0x156:0xc DW_TAG_array_type
-	.long	214                             # DW_AT_type
-	.byte	21                              # Abbrev [21] 0x15b:0x6 DW_TAG_subrange_type
-	.long	354                             # DW_AT_type
+	.byte	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
+	.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	1                               # DW_AT_count
 	.byte	0                               # End Of Children Mark
-	.byte	22                              # Abbrev [22] 0x162:0x7 DW_TAG_base_type
+	.byte	22                              # Abbrev [22] 0x185:0x7 DW_TAG_base_type
 	.long	.Linfo_string7                  # DW_AT_name
 	.byte	8                               # DW_AT_byte_size
 	.byte	7                               # DW_AT_encoding
-	.byte	7                               # Abbrev [7] 0x169:0x5 DW_TAG_reference_type
-	.long	366                             # DW_AT_type
-	.byte	10                              # Abbrev [10] 0x16e:0x5 DW_TAG_const_type
-	.long	371                             # DW_AT_type
-	.byte	20                              # Abbrev [20] 0x173:0xc DW_TAG_array_type
-	.long	197                             # DW_AT_type
-	.byte	21                              # Abbrev [21] 0x178:0x6 DW_TAG_subrange_type
-	.long	354                             # DW_AT_type
+	.byte	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	1                               # DW_AT_count
 	.byte	0                               # End Of Children Mark
-	.byte	23                              # Abbrev [23] 0x17f:0x5 DW_TAG_subroutine_type
-	.long	197                             # DW_AT_type
-	.byte	16                              # Abbrev [16] 0x184:0x7 DW_TAG_subroutine_type
-	.byte	18                              # Abbrev [18] 0x185:0x5 DW_TAG_formal_parameter
-	.long	197                             # DW_AT_type
+	.byte	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] 0x18b:0xc DW_TAG_subroutine_type
-	.byte	18                              # Abbrev [18] 0x18c:0x5 DW_TAG_formal_parameter
-	.long	197                             # DW_AT_type
-	.byte	18                              # Abbrev [18] 0x191:0x5 DW_TAG_formal_parameter
-	.long	197                             # DW_AT_type
+	.byte	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	0                               # End Of Children Mark
-	.byte	9                               # Abbrev [9] 0x197:0x5 DW_TAG_pointer_type
-	.long	412                             # DW_AT_type
-	.byte	16                              # Abbrev [16] 0x19c:0xc DW_TAG_subroutine_type
-	.byte	18                              # Abbrev [18] 0x19d:0x5 DW_TAG_formal_parameter
-	.long	424                             # DW_AT_type
-	.byte	18                              # Abbrev [18] 0x1a2:0x5 DW_TAG_formal_parameter
-	.long	197                             # DW_AT_type
+	.byte	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	0                               # End Of Children Mark
-	.byte	9                               # Abbrev [9] 0x1a8:0x5 DW_TAG_pointer_type
-	.long	260                             # DW_AT_type
-	.byte	10                              # Abbrev [10] 0x1ad:0x5 DW_TAG_const_type
-	.long	434                             # DW_AT_type
-	.byte	9                               # Abbrev [9] 0x1b2:0x5 DW_TAG_pointer_type
-	.long	439                             # DW_AT_type
-	.byte	24                              # Abbrev [24] 0x1b7:0x1 DW_TAG_subroutine_type
-	.byte	10                              # Abbrev [10] 0x1b8:0x5 DW_TAG_const_type
-	.long	439                             # DW_AT_type
-	.byte	12                              # Abbrev [12] 0x1bd:0x5 DW_TAG_volatile_type
-	.long	450                             # DW_AT_type
-	.byte	25                              # Abbrev [25] 0x1c2:0x1 DW_TAG_subroutine_type
-                                        # DW_AT_rvalue_reference
-	.byte	10                              # Abbrev [10] 0x1c3:0x5 DW_TAG_const_type
-	.long	456                             # DW_AT_type
-	.byte	12                              # Abbrev [12] 0x1c8:0x5 DW_TAG_volatile_type
-	.long	461                             # DW_AT_type
-	.byte	26                              # Abbrev [26] 0x1cd:0x1 DW_TAG_subroutine_type
-                                        # DW_AT_reference
-	.byte	16                              # Abbrev [16] 0x1ce:0x7 DW_TAG_subroutine_type
-	.byte	18                              # Abbrev [18] 0x1cf:0x5 DW_TAG_formal_parameter
+	.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
 	.long	469                             # DW_AT_type
-	.byte	0                               # End Of Children Mark
 	.byte	9                               # Abbrev [9] 0x1d5:0x5 DW_TAG_pointer_type
-	.long	322                             # DW_AT_type
-	.byte	27                              # Abbrev [27] 0x1da:0xb DW_TAG_subroutine_type
+	.long	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	18                              # Abbrev [18] 0x1df:0x5 DW_TAG_formal_parameter
-	.long	197                             # DW_AT_type
+	.byte	25                              # Abbrev [25] 0x1e5: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
+                                        # 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	0                               # End Of Children Mark
-	.byte	9                               # Abbrev [9] 0x1e5:0x5 DW_TAG_pointer_type
-	.long	490                             # DW_AT_type
-	.byte	16                              # Abbrev [16] 0x1ea:0x7 DW_TAG_subroutine_type
-	.byte	18                              # Abbrev [18] 0x1eb:0x5 DW_TAG_formal_parameter
-	.long	497                             # DW_AT_type
+	.byte	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	0                               # End Of Children Mark
-	.byte	6                               # Abbrev [6] 0x1f1:0x7 DW_TAG_base_type
+	.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	0                               # End Of Children Mark
+	.byte	6                               # Abbrev [6] 0x214:0x7 DW_TAG_base_type
 	.long	.Linfo_string8                  # 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
+	.long	.Linfo_string10                 # 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	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
+                                        # 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 0543d3a279346152e88fb40f0f817ca8bd145864)" # string offset=0
+	.asciz	"clang version 14.0.0 (git at github.com:llvm/llvm-project.git 51eba07e98b79a47d54e4fb36a3812cf3c91c667)" # string offset=0
 .Linfo_string1:
 	.asciz	"test.cpp"                      # string offset=101
 .Linfo_string2:
@@ -553,9 +626,16 @@
 .Linfo_string8:
 	.asciz	"float"                         # string offset=187
 .Linfo_string9:
-	.asciz	"t1"                            # string offset=193
-	.ident	"clang version 14.0.0 (git at github.com:llvm/llvm-project.git 0543d3a279346152e88fb40f0f817ca8bd145864)"
+	.asciz	"ns"                            # string offset=193
+.Linfo_string10:
+	.asciz	"inner"                         # string offset=196
+.Linfo_string11:
+	.asciz	"anon_ns_mem"                   # string offset=202
+.Linfo_string12:
+	.asciz	"t1"                            # string offset=214
+	.ident	"clang version 14.0.0 (git at github.com:llvm/llvm-project.git 51eba07e98b79a47d54e4fb36a3812cf3c91c667)"
 	.section	".note.GNU-stack","", at progbits
 	.addrsig
+	.addrsig_sym v1
 	.section	.debug_line,"", at progbits
 .Lline_table_start0:


        


More information about the llvm-commits mailing list