/* { dg-do run } */ /* { dg-options "-O1" } */ struct S { int i, j; }; struct Z { struct S d, s; }; struct S __attribute__ ((noinline, noclone)) get_s (void) { struct S s; s.i = 5; s.j = 6; return s; } struct S __attribute__ ((noinline, noclone)) get_d (void) { struct S d; d.i = 0; d.j = 0; return d; } int __attribute__ ((noinline, noclone)) get_c (void) { return 1; } int __attribute__ ((noinline, noclone)) my_nop (int i) { return i; } int __attribute__ ((noinline, noclone)) foo (void) { struct Z z; int i, c = get_c (); z.d = get_d (); z.s = get_s (); for (i = 0; i < c; i++) { z.s.i = my_nop (z.s.i); z.s.j = my_nop (z.s.j); } return z.s.i + z.s.j; } int main (int argc, char *argv[]) { if (foo () != 11) __builtin_abort (); return 0; }