]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-ssa-ccp.c (fold_builtin_alloca_for_var): Do not fold alloca (0).
authorRichard Guenther <rguenther@suse.de>
Fri, 2 Sep 2011 11:53:55 +0000 (11:53 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 2 Sep 2011 11:53:55 +0000 (11:53 +0000)
2011-09-02  Richard Guenther  <rguenther@suse.de>

* tree-ssa-ccp.c (fold_builtin_alloca_for_var): Do not
fold alloca (0).
(ccp_fold_stmt): Continue replacing args when folding
alloca fails.

From-SVN: r178465

gcc/ChangeLog
gcc/tree-ssa-ccp.c

index ffd2855a31bd5296a3f5f01fedac81831ee8126b..e8cdf9e71f4fb8d9aa2ede4cf3f1cc47a3797eb7 100644 (file)
@@ -1,3 +1,10 @@
+2011-09-02  Richard Guenther  <rguenther@suse.de>
+
+       * tree-ssa-ccp.c (fold_builtin_alloca_for_var): Do not
+       fold alloca (0).
+       (ccp_fold_stmt): Continue replacing args when folding
+       alloca fails.
+
 2011-08-31  Richard Guenther  <rguenther@suse.de>
 
        * expr.c (expand_expr_real_2): Move COND_EXPR and VEC_COND_EXPR
index 007e17dd8b6882210b53c972a1a11c053391a84d..fc8d74780eaad9fad7b97251c746af4deb953790 100644 (file)
@@ -1702,10 +1702,14 @@ fold_builtin_alloca_for_var (gimple stmt)
 
   /* Detect constant argument.  */
   arg = get_constant_value (gimple_call_arg (stmt, 0));
-  if (arg == NULL_TREE || TREE_CODE (arg) != INTEGER_CST
+  if (arg == NULL_TREE
+      || TREE_CODE (arg) != INTEGER_CST
       || !host_integerp (arg, 1))
     return NULL_TREE;
+
   size = TREE_INT_CST_LOW (arg);
+  if (size == 0)
+    return NULL_TREE;
 
   /* Heuristic: don't fold large vlas.  */
   threshold = (unsigned HOST_WIDE_INT)PARAM_VALUE (PARAM_LARGE_STACK_FRAME);
@@ -1804,12 +1808,12 @@ ccp_fold_stmt (gimple_stmt_iterator *gsi)
         if (gimple_call_alloca_for_var_p (stmt))
           {
             tree new_rhs = fold_builtin_alloca_for_var (stmt);
-            bool res;
-            if (new_rhs == NULL_TREE)
-              return false;
-            res = update_call_from_tree (gsi, new_rhs);
-            gcc_assert (res);
-            return true;
+            if (new_rhs)
+             {
+               bool res = update_call_from_tree (gsi, new_rhs);
+               gcc_assert (res);
+               return true;
+             }
           }
 
        /* Propagate into the call arguments.  Compared to replace_uses_in