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) {