I was seeing crashes on localclass1.C for some testruns. The issue turned out to be that we are doing better at pruning unnecessary debug info, so we end up with 'B' on limbo_die_list and never referred to. Let's deal with that situation.

Tested x86_64-pc-linux-gnu, applying to trunk.
commit 9bff8274719d394395941353e6d98694613b9643
Author: Jason Merrill <ja...@redhat.com>
Date:   Thu Jun 11 13:09:13 2015 -0400

    	* dwarf2out.c (prune_unused_types): Handle unused top-level limbo
    	dies.

diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 8a36fe8..3a92b02 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -23789,8 +23789,17 @@ prune_unused_types (void)
   if (skeleton_debug_str_hash)
     skeleton_debug_str_hash->empty ();
   prune_unused_types_prune (comp_unit_die ());
-  for (node = limbo_die_list; node; node = node->next)
-    prune_unused_types_prune (node->die);
+  for (limbo_die_node **pnode = &limbo_die_list; *pnode; )
+    {
+      node = *pnode;
+      if (!node->die->die_mark)
+	*pnode = node->next;
+      else
+	{
+	  prune_unused_types_prune (node->die);
+	  pnode = &node->next;
+	}
+    }
   for (ctnode = comdat_type_list; ctnode; ctnode = ctnode->next)
     prune_unused_types_prune (ctnode->root_die);
 

Reply via email to