https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82011

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Ok, so a simple checking patch like the following unfortunately fires
right and left, restricting it to DW_AT_inline doesn't fire for me on
the testcase you mention (add || a->dw_attr != DW_AT_inline to the assert
condition).  Can you check if that fires for you?

Index: gcc/dwarf2out.c
===================================================================
--- gcc/dwarf2out.c     (revision 251399)
+++ gcc/dwarf2out.c     (working copy)
@@ -4122,6 +4122,16 @@ add_dwarf_attr (dw_die_ref die, dw_attr_
   if (die == NULL)
     return;

+  if (flag_checking)
+    {
+      /* Check we do not add duplicate attrs.  Can't use get_AT here
+         because that recurses to the specification/abstract origin DIE.  */
+      dw_attr_node *a;
+      unsigned ix;
+      FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
+       gcc_assert (a->dw_attr != attr->dw_attr);
+    }
+
   vec_safe_reserve (die->die_attr, 1);
   vec_safe_push (die->die_attr, *attr);
 }

Reply via email to