111
|
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))
|
|
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))
|
|
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))
|
|
35 get_c (void)
|
|
36 {
|
|
37 return 1;
|
|
38 }
|
|
39
|
|
40 int __attribute__ ((noinline, noclone))
|
|
41 my_nop (int i)
|
|
42 {
|
|
43 return i;
|
|
44 }
|
|
45
|
|
46 int __attribute__ ((noinline, noclone))
|
|
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
|
|
64 int main (int argc, char *argv[])
|
|
65 {
|
|
66 if (foo () != 11)
|
|
67 __builtin_abort ();
|
|
68 return 0;
|
|
69 }
|
|
70
|