From 13868f4049616f5ac73bb89ce38474ada50ff28c Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sat, 3 Sep 2011 14:56:53 +0000 Subject: [PATCH] cfgexpand.c (add_stack_var): Assert that the alignment is not zero. * 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. From-SVN: r178499 --- gcc/ChangeLog | 6 ++++++ gcc/cfgexpand.c | 2 ++ gcc/tree-ssa-ccp.c | 4 ++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 48bdefac5c64..8da81f7cbe3f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-09-03 Eric Botcazou + + * 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 * opts.c (print_specific_help): Fix off-by-one compare in diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 03a4409eeda9..1495633840bb 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 fc8d74780eaa..fc59d386cad5 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; -- 2.47.2