This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: egcs-2.93.08 19990215 sparc-sun-solaris2.5 bootstrap fails (genrecog)
- To: Alexandre Oliva <oliva at dcc dot unicamp dot br>
- Subject: Re: egcs-2.93.08 19990215 sparc-sun-solaris2.5 bootstrap fails (genrecog)
- From: Jeffrey A Law <law at hurl dot cygnus dot com>
- Date: Thu, 18 Feb 1999 12:58:55 -0700
- cc: "Kaveh R. Ghazi" <ghazi at caip dot rutgers dot edu>, egcs-bugs at egcs dot cygnus dot com, rth at cygnus dot com
- Reply-To: law at cygnus dot com
In message <orbtirbl5i.fsf@araguaia.dcc.unicamp.br>you write:
> Yep. assign_stack_temp used to call assign_stack_local with -1 for
> align, if it ended up having to create a new stack slot. Now,
> assign_stack_temp_for_type will calculate some value for align and
> pass it instead.
[ ... ]
Y'all want to give this (untested) patch a try?
Index: function.c
===================================================================
RCS file: /egcs/carton/cvsfiles/egcs/gcc/function.c,v
retrieving revision 1.73
diff -c -3 -p -r1.73 function.c
*** function.c 1999/02/10 23:10:39 1.73
--- function.c 1999/02/18 19:57:55
*************** assign_stack_temp_for_type (mode, size,
*** 963,968 ****
--- 963,980 ----
p = (struct temp_slot *) oballoc (sizeof (struct temp_slot));
+ /* We are passing an explicit alignment request to assign_stack_local.
+ One side effect of that is assign_stack_local will not round SIZE
+ to ensure the frame offset remains suitably aligned.
+
+ 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);
p->align = align;