131
|
1 /* { dg-do run { target int32plus } } */
|
111
|
2 /* { dg-options "-O" } */
|
|
3
|
|
4 struct S0
|
|
5 {
|
|
6 unsigned a : 15;
|
|
7 int b;
|
|
8 int c;
|
|
9 };
|
|
10
|
|
11 struct S1
|
|
12 {
|
|
13 struct S0 s0;
|
|
14 int e;
|
|
15 };
|
|
16
|
|
17 struct Z
|
|
18 {
|
|
19 char c;
|
|
20 int z;
|
|
21 } __attribute__((packed));
|
|
22
|
|
23 union U
|
|
24 {
|
|
25 struct S1 s1;
|
|
26 struct Z z;
|
|
27 };
|
|
28
|
|
29
|
|
30 int __attribute__((noinline, noclone))
|
|
31 return_zero (void)
|
|
32 {
|
|
33 return 0;
|
|
34 }
|
|
35
|
|
36 volatile union U gu;
|
|
37 struct S0 gs;
|
|
38
|
|
39 int __attribute__((noinline, noclone))
|
|
40 check_outcome ()
|
|
41 {
|
|
42 if (gs.a != 6
|
|
43 || gs.b != 80000)
|
|
44 __builtin_abort ();
|
|
45 }
|
|
46
|
|
47 int
|
|
48 main (int argc, char *argv[])
|
|
49 {
|
|
50 union U u;
|
|
51 struct S1 m,n;
|
|
52 struct S0 l;
|
|
53
|
|
54 if (return_zero ())
|
|
55 u.z.z = 20000;
|
|
56 else
|
|
57 {
|
|
58 u.s1.s0.a = 6;
|
|
59 u.s1.s0.b = 80000;
|
|
60 u.s1.e = 2;
|
|
61
|
|
62 n = u.s1;
|
|
63 m = n;
|
|
64 m.s0.c = 0;
|
|
65 l = m.s0;
|
|
66 gs = l;
|
|
67 }
|
|
68
|
|
69 gu = u;
|
|
70 check_outcome ();
|
|
71 return 0;
|
|
72 }
|