diff options
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/function.c | 12 |
2 files changed, 14 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0a6bf91..3b00577 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +Fri Mar 5 02:14:54 1999 John Wehle (john@feith.com) + + * function.c (assign_stack_temp_for_type): Abort + if mode == Blkmode and align is less than + BIGGEST_ALIGNMENT / BITS_PER_UNIT. + (assign_stack_temp_for_type): Round the size parameter + passed to assign_stack_local instead of size itself. + Thu Mar 4 15:00:35 1999 Richard Henderson <rth@cygnus.com> * flow.c (delete_unreachable_blocks): Mark blocks as they diff --git a/gcc/function.c b/gcc/function.c index 4d67366..d6d5aa6 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -998,12 +998,12 @@ assign_stack_temp_for_type (mode, size, keep, type) So for requests which depended on the rounding of SIZE, we go ahead and round it now. We also make sure ALIGNMENT is at least BIGGEST_ALIGNMENT. */ - if (mode == BLKmode) - { - align = MAX (align, BIGGEST_ALIGNMENT / BITS_PER_UNIT); - size = CEIL_ROUND (size, align); - } - p->slot = assign_stack_local (mode, size, align); + if (mode == BLKmode && align < (BIGGEST_ALIGNMENT / BITS_PER_UNIT)) + abort(); + p->slot = assign_stack_local (mode, + mode == BLKmode + ? CEIL_ROUND (size, align) : size, + align); p->align = align; p->alias_set = alias_set; |