From b2a80c0d2bb7bd4b7cb6fc0c56ea723a2dd8931c Mon Sep 17 00:00:00 2001 From: Doug Evans Date: Tue, 15 Nov 1994 14:55:15 +0000 Subject: [PATCH] (assign_stack_temp): Compute size of slot after assign_stack_local has accounted for alignment. From-SVN: r8438 --- gcc/function.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/gcc/function.c b/gcc/function.c index 844af836f63..1a206a9b4cf 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -856,11 +856,21 @@ assign_stack_temp (mode, size, keep) /* If we still didn't find one, make a new temporary. */ if (p == 0) { + int frame_offset_old = frame_offset; p = (struct temp_slot *) oballoc (sizeof (struct temp_slot)); - p->size = size; /* If the temp slot mode doesn't indicate the alignment, use the largest possible, so no one will be disappointed. */ p->slot = assign_stack_local (mode, size, mode == BLKmode ? -1 : 0); + /* The following slot size computation is necessary because we don't + know the actual size of the temporary slot until assign_stack_local + has performed all the frame alignment and size rounding for the + requested temporary. Otherwise combine_temp_slots won't think that + adjacent slots really are adjacent. */ +#ifdef FRAME_GROWS_DOWNWARD + p->size = frame_offset_old - frame_offset; +#else + p->size = frame_offset - frame_offset_old; +#endif p->address = 0; p->next = temp_slots; temp_slots = p; -- 2.30.2