1 /* { dg-do run } */
2 /* { dg-options "-O1" } */
3 
4 struct S
5 {
6   int i, j;
7 };
8 
9 struct Z
10 {
11   struct S d, s;
12 };
13 
14 struct S __attribute__ ((noinline, noclone))
get_s(void)15 get_s (void)
16 {
17   struct S s;
18   s.i = 5;
19   s.j = 6;
20 
21   return s;
22 }
23 
24 struct S __attribute__ ((noinline, noclone))
get_d(void)25 get_d (void)
26 {
27   struct S d;
28   d.i = 0;
29   d.j = 0;
30 
31   return d;
32 }
33 
34 int __attribute__ ((noinline, noclone))
get_c(void)35 get_c (void)
36 {
37   return 1;
38 }
39 
40 int __attribute__ ((noinline, noclone))
my_nop(int i)41 my_nop (int i)
42 {
43   return i;
44 }
45 
46 int __attribute__ ((noinline, noclone))
foo(void)47 foo (void)
48 {
49   struct Z z;
50   int i, c = get_c ();
51 
52   z.d = get_d ();
53   z.s = get_s ();
54 
55   for (i = 0; i < c; i++)
56     {
57       z.s.i = my_nop (z.s.i);
58       z.s.j = my_nop (z.s.j);
59     }
60 
61   return z.s.i + z.s.j;
62 }
63 
main(int argc,char * argv[])64 int main (int argc, char *argv[])
65 {
66   if (foo () != 11)
67     __builtin_abort ();
68   return 0;
69 }
70 
71