The attached patch fixes gcc/testsuite/g++.dg/debug/dwarf2/template-func-params-7.C.

The problem is that DW_TAG_GNU_formal_parameter_pack DIEs are generated multiple times (once for early dwarf and once for late dwarf). Fixed by only outputting in early dwarf.

Tested with GCC and GDB testsuites.

Committed to branch.

Aldy
commit e74781aabb821c402a9c1efeb69a6311e4e905cf
Author: Aldy Hernandez <al...@redhat.com>
Date:   Wed Apr 22 16:50:09 2015 -0700

    Only output DW_TAG_GNU_formal_parameter_pack DIEs once.

diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 7cc6bb5..624ed19 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -19137,9 +19137,14 @@ gen_subprogram_die (tree decl, dw_die_ref context_die)
        {
          if (generic_decl_parm
              && lang_hooks.function_parameter_pack_p (generic_decl_parm))
-           gen_formal_parameter_pack_die (generic_decl_parm,
-                                          parm, subr_die,
-                                          &parm);
+           {
+             if (early_dwarf_dumping)
+               gen_formal_parameter_pack_die (generic_decl_parm,
+                                              parm, subr_die,
+                                              &parm);
+             else if (parm)
+               parm = DECL_CHAIN (parm);
+           }
          else if (parm && !POINTER_BOUNDS_P (parm))
            {
              dw_die_ref parm_die = gen_decl_die (parm, NULL, subr_die);

Reply via email to