------- Comment #23 from hjl dot tools at gmail dot com  2010-09-22 21:36 
-------
(In reply to comment #22)
> The 4.5/4.4 backports of this patch break:
> /* { dg-do compile } */
> /* { dg-options "-march=i586" { target ilp32 } } */
> 
> struct S { union { double b[4]; } a[18]; } s, a[5];
> void foo (struct S);
> struct S bar (struct S, struct S *, struct S);
> 
> void
> foo (struct S arg)
> {
> }
> 
> void
> baz (void)
> {
>   foo (bar (s, &a[1], a[2]));
> }

We are trying to adjust stacking when calling builtin functions. This patch
works for me:

index aef823f..0c7588a 100644
--- a/gcc/calls.c
+++ b/gcc/calls.c
@@ -2369,7 +2369,7 @@ expand_call (tree exp, rtx target, int ignore)

   preferred_unit_stack_boundary = preferred_stack_boundary / BITS_PER_UNIT;

-  if (SUPPORTS_STACK_ALIGNMENT)
+  if (SUPPORTS_STACK_ALIGNMENT && fndecl && !DECL_IS_BUILTIN (fndecl))
     {
       /* All variable sized adjustments must be multiple of preferred
         stack boundary.  Stack alignment may change preferred stack


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45234

Reply via email to