https://gcc.gnu.org/g:53e1686e6e0c3e809384e6fcf5eed46f37bc296b

commit r15-7512-g53e1686e6e0c3e809384e6fcf5eed46f37bc296b
Author: Ed Catmur <e...@catmur.uk>
Date:   Sat Feb 4 17:50:33 2023 +0100

    dwarf: emit DW_AT_name for DW_TAG_GNU_formal_parameter_pack [PR70536]
    
    Per https://wiki.dwarfstd.org/C++0x_Variadic_templates.md
    DW_TAG_GNU_formal_parameter_pack should have a DW_AT_name:
    
    17$:      DW_TAG_formal_parameter_pack
                  DW_AT_name("args")
    18$:          DW_TAG_formal_parameter
                      ! no DW_AT_name attribute
                      DW_AT_type(reference to 13$)
    (...)
    
            PR c++/70536
    
    gcc/ChangeLog:
    
            * dwarf2out.cc (gen_formal_parameter_pack_die): Add name attr.
    
    gcc/testsuite/ChangeLog:
    
            * g++.dg/debug/dwarf2/template-func-params-7.C: Check for pack 
names.
    
    Co-authored-by: Jason Merrill <ja...@redhat.com>

Diff:
---
 gcc/dwarf2out.cc                                           | 2 +-
 gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-7.C | 7 +++++--
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc
index 43884f206c07..ed7d9402200e 100644
--- a/gcc/dwarf2out.cc
+++ b/gcc/dwarf2out.cc
@@ -23195,7 +23195,7 @@ gen_formal_parameter_pack_die  (tree parm_pack,
              && subr_die);
 
   parm_pack_die = new_die (DW_TAG_GNU_formal_parameter_pack, subr_die, 
parm_pack);
-  add_src_coords_attributes (parm_pack_die, parm_pack);
+  add_name_and_src_coords_attributes (parm_pack_die, parm_pack);
 
   for (arg = pack_arg; arg; arg = DECL_CHAIN (arg))
     {
diff --git a/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-7.C 
b/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-7.C
index 22b0e4f984da..4e95c238bcd3 100644
--- a/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-7.C
+++ b/gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-7.C
@@ -23,6 +23,9 @@
 // These 3 function template instantiations has a total of 3 template
 // parameters named T.
 // { dg-final { scan-assembler-times "\.ascii \"T.0\"\[\t 
\]+\[^\n\]*DW_AT_name" 3 } }
+// And the packs also have names.
+// { dg-final { scan-assembler-times "\.ascii \"PTs.0\"\[\t 
\]+\[^\n\]*DW_AT_name" 3 } }
+// { dg-final { scan-assembler-times "\.ascii \"args.0\"\[\t 
\]+\[^\n\]*DW_AT_name" 3 } }
 
 
 void
@@ -35,11 +38,11 @@ printf(const char* s)
   */
 }
 
-template<typename T, typename... PackTypes>
+template<typename T, typename... PTs>
 void
 printf(const char* s,
        T value,
-       PackTypes... args)
+       PTs... args)
 {
   while (*s)
     {

Reply via email to