re PR middle-end/45962 (many c/c++ failures on cris-elf, in r165236:165242)

PR middle-end/45962
	* cfgexpand.c (add_stack_var): Ensure every variable has 1 byte.
	(expand_stack_vars): Assert large base allocated when used.

From-SVN: r165382
This commit is contained in:
Richard Henderson 2010-10-12 08:53:15 -07:00 committed by Richard Henderson
parent d3a7350497
commit 533f611ac4
2 changed files with 22 additions and 7 deletions

View File

@ -1,3 +1,9 @@
2010-10-12 Richard Henderson <rth@redhat.com>
PR middle-end/45962
* cfgexpand.c (add_stack_var): Ensure every variable has 1 byte.
(expand_stack_vars): Assert large base allocated when used.
2010-10-12 Richard Guenther <rguenther@suse.de>
* tree-ssa-structalias.c (get_constraint_for_1): Constants

View File

@ -253,6 +253,8 @@ alloc_stack_frame_space (HOST_WIDE_INT size, unsigned HOST_WIDE_INT align)
static void
add_stack_var (tree decl)
{
struct stack_var *v;
if (stack_vars_num >= stack_vars_alloc)
{
if (stack_vars_alloc)
@ -262,17 +264,23 @@ add_stack_var (tree decl)
stack_vars
= XRESIZEVEC (struct stack_var, stack_vars, stack_vars_alloc);
}
stack_vars[stack_vars_num].decl = decl;
stack_vars[stack_vars_num].offset = 0;
stack_vars[stack_vars_num].size = tree_low_cst (DECL_SIZE_UNIT (SSAVAR (decl)), 1);
stack_vars[stack_vars_num].alignb = get_decl_align_unit (SSAVAR (decl));
v = &stack_vars[stack_vars_num];
v->decl = decl;
v->offset = 0;
v->size = tree_low_cst (DECL_SIZE_UNIT (SSAVAR (decl)), 1);
/* Ensure that all variables have size, so that &a != &b for any two
variables that are simultaneously live. */
if (v->size == 0)
v->size = 1;
v->alignb = get_decl_align_unit (SSAVAR (decl));
/* All variables are initially in their own partition. */
stack_vars[stack_vars_num].representative = stack_vars_num;
stack_vars[stack_vars_num].next = EOC;
v->representative = stack_vars_num;
v->next = EOC;
/* All variables initially conflict with no other. */
stack_vars[stack_vars_num].conflicts = NULL;
v->conflicts = NULL;
/* Ensure that this decl doesn't get put onto the list twice. */
set_rtl (decl, pc_rtx);
@ -839,6 +847,7 @@ expand_stack_vars (bool (*pred) (tree))
/* Large alignment is only processed in the last pass. */
if (pred)
continue;
gcc_assert (large_base != NULL);
large_alloc += alignb - 1;
large_alloc &= -(HOST_WIDE_INT)alignb;