]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR debug/47106
authoraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 2 Feb 2011 06:18:01 +0000 (06:18 +0000)
committeraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 2 Feb 2011 06:18:01 +0000 (06:18 +0000)
PR debug/47402
* tree-flow-inline.h (clear_is_used, is_used_p): New.
* cfgexpand.c (account_used_vars_for_block): Use them.
* tree-nrv.c (tree_nrv): Likewise.
* tree-ssa-live.c (remove_unused_scope_block_p): Likewise.
(dump_scope_block): Likewise.
(remove_unused_locals): Likewise.

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

gcc/ChangeLog
gcc/cfgexpand.c
gcc/tree-flow-inline.h
gcc/tree-nrv.c
gcc/tree-ssa-live.c

index 7eea885e355b458013b07aa746fa3d2596108fea..8f2c36ce6c24790d59d72d30e582f46677861e02 100644 (file)
@@ -1,3 +1,14 @@
+2011-02-02  Alexandre Oliva  <aoliva@redhat.com>
+
+       PR debug/47106
+       PR debug/47402
+       * tree-flow-inline.h (clear_is_used, is_used_p): New.
+       * cfgexpand.c (account_used_vars_for_block): Use them.
+       * tree-nrv.c (tree_nrv): Likewise.
+       * tree-ssa-live.c (remove_unused_scope_block_p): Likewise.
+       (dump_scope_block): Likewise.
+       (remove_unused_locals): Likewise.
+
 2011-02-02  Alexandre Oliva  <aoliva@redhat.com>
 
        PR debug/47106
index bb60c3370848bcc1b97e2245964572c1863131e7..7b1c441b966c09f01305c0fd077214b5d2830204 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 (var_ann (t) && var_ann (t)->used)
+    if (var_ann (t) && is_used_p (t))
       size += expand_one_var (t, toplevel, false);
 
   /* Expand all variables at containing levels.  */
index 1a62cdd1f44f99455c3b0b52d9584434e657f4f9..23eb3d826defb1dcd8a5a6fc945be3a542582da4 100644 (file)
@@ -569,9 +569,26 @@ static inline void
 set_is_used (tree var)
 {
   var_ann_t ann = get_var_ann (var);
-  ann->used = 1;
+  ann->used = true;
 }
 
+/* Clear VAR's used flag.  */
+
+static inline void
+clear_is_used (tree var)
+{
+  var_ann_t ann = var_ann (var);
+  ann->used = false;
+}
+
+/* Return true if VAR is marked as used.  */
+
+static inline bool
+is_used_p (tree var)
+{
+  var_ann_t ann = var_ann (var);
+  return ann->used;
+}
 
 /* Return true if T (assumed to be a DECL) is a global variable.
    A variable is considered global if its storage is not automatic.  */
index 8ee3b8b0a4ba440066099ba7620afdb651bbd64b..32e422e5e20f0495c6c6baf21144f33a4b4fdb43 100644 (file)
@@ -263,7 +263,7 @@ tree_nrv (void)
   DECL_HAS_VALUE_EXPR_P (found) = 1;
 
   /* FOUND is no longer used.  Ensure it gets removed.  */
-  var_ann (found)->used = 0;
+  clear_is_used (found);
   return 0;
 }
 
index 4880a1a7bbdcb7ab771f9bdfdc4f75ab0d70883c..d917bb99a832dacf6ab590aaec5ca619f2503497 100644 (file)
@@ -468,7 +468,7 @@ remove_unused_scope_block_p (tree scope)
         Exception are the scope blocks not containing any instructions
         at all so user can't get into the scopes at first place.  */
       else if ((ann = var_ann (*t)) != NULL
-               && ann->used)
+              && is_used_p (*t))
        unused = false;
       else if (TREE_CODE (*t) == LABEL_DECL && TREE_USED (*t))
        /* For labels that are still used in the IL, the decision to
@@ -633,13 +633,11 @@ dump_scope_block (FILE *file, int indent, tree scope, int flags)
   for (var = BLOCK_VARS (scope); var; var = DECL_CHAIN (var))
     {
       bool used = false;
-      var_ann_t ann;
 
-      if ((ann = var_ann (var))
-         && ann->used)
-       used = true;
+      if (var_ann (var))
+       used = is_used_p (var);
 
-      fprintf (file, "%*s",indent, "");
+      fprintf (file, "%*s", indent, "");
       print_generic_decl (file, var, flags);
       fprintf (file, "%s\n", used ? "" : " (unused)");
     }
@@ -708,7 +706,7 @@ remove_unused_locals (void)
 
   /* Assume all locals are unused.  */
   FOR_EACH_REFERENCED_VAR (t, rvi)
-    var_ann (t)->used = false;
+    clear_is_used (t);
 
   /* Walk the CFG marking all referenced symbols.  */
   FOR_EACH_BB (bb)
@@ -769,7 +767,7 @@ remove_unused_locals (void)
       var = VEC_index (tree, cfun->local_decls, srcidx);
       if (TREE_CODE (var) != FUNCTION_DECL
          && (!(ann = var_ann (var))
-             || !ann->used))
+             || !is_used_p (var)))
        {
          if (is_global_var (var))
            {
@@ -801,7 +799,7 @@ remove_unused_locals (void)
        if (TREE_CODE (var) == VAR_DECL
            && is_global_var (var)
            && (ann = var_ann (var)) != NULL
-           && ann->used)
+           && is_used_p (var))
          mark_all_vars_used (&DECL_INITIAL (var), global_unused_vars);
 
       num = VEC_length (tree, cfun->local_decls);
@@ -827,8 +825,8 @@ remove_unused_locals (void)
     if (!is_global_var (t)
        && TREE_CODE (t) != PARM_DECL
        && TREE_CODE (t) != RESULT_DECL
-       && !(ann = var_ann (t))->used
-       && !ann->is_heapvar)
+       && !is_used_p (t)
+       && !var_ann (t)->is_heapvar)
       remove_referenced_var (t);
   remove_unused_scope_block_p (DECL_INITIAL (current_function_decl));
   if (dump_file && (dump_flags & TDF_DETAILS))