------- 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