OSDN Git Service

PR debug/47106
authoraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 21 Jan 2011 14:57:33 +0000 (14:57 +0000)
committeraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 21 Jan 2011 14:57:33 +0000 (14:57 +0000)
* cfgexpand.c (account_used_vars_for_block): Only account vars
that are annotated as used.
(estimated_stack_frame_size): Don't set TREE_USED.
* tree-dfa.c (create_var_ann): Mark variable as used.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@169093 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/cfgexpand.c
gcc/tree-dfa.c

index b5a53f6..36ad66e 100644 (file)
@@ -1,3 +1,11 @@
+2011-01-21  Alexandre Oliva  <aoliva@redhat.com>
+
+       PR debug/47106
+       * cfgexpand.c (account_used_vars_for_block): Only account vars
+       that are annotated as used.
+       (estimated_stack_frame_size): Don't set TREE_USED.
+       * tree-dfa.c (create_var_ann): Mark variable as used.
+
 2011-01-21  Richard Guenther  <rguenther@suse.de>
 
        PR middle-end/47395
index aeb2361..bb60c33 100644 (file)
@@ -1325,7 +1325,7 @@ account_used_vars_for_block (tree block, bool toplevel)
 
   /* Expand all variables at this level.  */
   for (t = BLOCK_VARS (block); t ; t = DECL_CHAIN (t))
-    if (TREE_USED (t))
+    if (var_ann (t) && var_ann (t)->used)
       size += expand_one_var (t, toplevel, false);
 
   /* Expand all variables at containing levels.  */
@@ -1389,9 +1389,10 @@ estimated_stack_frame_size (tree decl)
 
   FOR_EACH_LOCAL_DECL (cfun, ix, var)
     {
+      /* TREE_USED marks local variables that do not appear in lexical
+        blocks.  We don't want to expand those that do twice.  */
       if (TREE_USED (var))
         size += expand_one_var (var, true, false);
-      TREE_USED (var) = 1;
     }
   size += account_used_vars_for_block (outer_block, true);
 
index 05a682b..8766744 100644 (file)
@@ -137,6 +137,9 @@ create_var_ann (tree t)
   ann = ggc_alloc_cleared_var_ann_d ();
   *DECL_VAR_ANN_PTR (t) = ann;
 
+  /* Assume the variable is used, at least for now.  */
+  ann->used = true;
+
   return ann;
 }