/* { dg-do run } */ /* { dg-options "-O -mstd-struct-return" } */ /* { dg-require-effective-target ilp32 } */ extern void abort (void); struct S { int x, y, z; }; extern void bar (struct S *s) __attribute__ ((noinline, noclone)); void bar (struct S *s) { s->x++; } struct S foo (void) { struct S s = { 0, 2, 3 }; bar (&s); return s; } int main (void) { struct S s = foo (); if (s.x != 1) abort (); return 0; }