This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix PR54632


This fixes PR54632 - we can end up with garbage collected BLOCKs
(those not part of any BLOCK tree) being still referenced from
DECL_DEBUG_EXPRs.  We try to handle that in clear_unused_block_pointer
but fail to walk all local decls as source of them (but only catch
those that are still actively used in stmt operands).

Bootstrap & regtest pending on x86_64-unknown-linux-gnu.

Richard.

2012-09-24  Richard Guenther  <rguenther@suse.de>

	PR middle-end/54632
	* tree-ssa-live.c (clear_unused_block_pointer_1): Do not
	handle DECL_DEBUG_EXPR_IS_FROM here...
	(clear_unused_block_pointer): ... but here when walking all
	local decls.

Index: gcc/tree-ssa-live.c
===================================================================
--- gcc/tree-ssa-live.c	(revision 191664)
+++ gcc/tree-ssa-live.c	(working copy)
@@ -620,11 +620,6 @@ clear_unused_block_pointer_1 (tree *tp,
   if (EXPR_P (*tp) && TREE_BLOCK (*tp)
       && !TREE_USED (TREE_BLOCK (*tp)))
     TREE_SET_BLOCK (*tp, NULL);
-  if (TREE_CODE (*tp) == VAR_DECL && DECL_DEBUG_EXPR_IS_FROM (*tp))
-    {
-      tree debug_expr = DECL_DEBUG_EXPR (*tp);
-      walk_tree (&debug_expr, clear_unused_block_pointer_1, NULL, NULL);
-    }
   return NULL_TREE;
 }
 
@@ -636,6 +631,16 @@ clear_unused_block_pointer ()
 {
   basic_block bb;
   gimple_stmt_iterator gsi;
+  tree t;
+  unsigned i;
+
+  FOR_EACH_LOCAL_DECL (cfun, i, t)
+    if (TREE_CODE (t) == VAR_DECL && DECL_DEBUG_EXPR_IS_FROM (t))
+      {
+	tree debug_expr = DECL_DEBUG_EXPR (t);
+	walk_tree (&debug_expr, clear_unused_block_pointer_1, NULL, NULL);
+      }
+
   FOR_EACH_BB (bb)
     for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
       {


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]