summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cfgexpand.c2
-rw-r--r--gcc/tree-ssa-ccp.c4
3 files changed, 10 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 48bdefac5c6..8da81f7cbe3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-09-03 Eric Botcazou <ebotcazou@adacore.com>
+
+ * cfgexpand.c (add_stack_var): Assert that the alignment is not zero.
+ * tree-ssa-ccp.c (fold_builtin_alloca_for_var): Revert latest change.
+ Force at least BITS_PER_UNIT alignment on the new variable.
+
2011-09-02 Gary Funck <gary@intrepid.com>
* opts.c (print_specific_help): Fix off-by-one compare in
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 03a4409eeda..1495633840b 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -271,6 +271,8 @@ add_stack_var (tree decl)
if (v->size == 0)
v->size = 1;
v->alignb = align_local_variable (SSAVAR (decl));
+ /* An alignment of zero can mightily confuse us later. */
+ gcc_assert (v->alignb != 0);
/* All variables are initially in their own partition. */
v->representative = stack_vars_num;
diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c
index fc8d74780ea..fc59d386cad 100644
--- a/gcc/tree-ssa-ccp.c
+++ b/gcc/tree-ssa-ccp.c
@@ -1708,8 +1708,6 @@ fold_builtin_alloca_for_var (gimple stmt)
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);
@@ -1726,6 +1724,8 @@ fold_builtin_alloca_for_var (gimple stmt)
elem_type = build_nonstandard_integer_type (BITS_PER_UNIT, 1);
n_elem = size * 8 / BITS_PER_UNIT;
align = MIN (size * 8, BIGGEST_ALIGNMENT);
+ if (align < BITS_PER_UNIT)
+ align = BITS_PER_UNIT;
array_type = build_array_type_nelts (elem_type, n_elem);
var = create_tmp_var (array_type, NULL);
DECL_ALIGN (var) = align;