The code handling parameter DIEs needed a little tweaking for variable length template arguments. I've relaxed the original assert, but this may require tweaking at branch review time-- hopefully later this week.

Committing to branch.

Aldy

p.s. Richi/Jason: Winter is coming. Down to 1 GCC regression which is actually a missed DIE optimization which I hope I can fix post merge.
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index c51cea1..a5b155f 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -18018,8 +18018,20 @@ gen_formal_parameter_die (tree node, tree origin, bool 
emit_name_p,
         DW_AT_abstract_origin.  */
       if (parm_die && parm_die->die_parent != context_die)
        {
-         gcc_assert (!DECL_ABSTRACT_P (node));
-         parm_die = NULL;
+         if (!DECL_ABSTRACT_P (node))
+           {
+             gcc_assert (!DECL_ABSTRACT_P (node));
+             parm_die = NULL;
+           }
+         else
+           {
+             /* Reuse DIE even with a differing context.  This
+                happens when called through
+                dwarf2out_abstract_function for
+                formal parameter packs.  */
+             gcc_assert (parm_die->die_parent->die_tag
+                         == DW_TAG_GNU_formal_parameter_pack);
+           }
        }
 
       if (parm_die && parm_die->die_parent == NULL)

Reply via email to