1 /* { dg-do run } */
2 /* { dg-options "-O1" } */
3 
4 #include <stdlib.h>
5 
6 typedef union
7 {
8   struct
9   {
10     unsigned char a;
11     unsigned char b;
12     unsigned char c;
13     unsigned char d;
14   } parts;
15   unsigned long whole;
16 } T;
17 
18 T *g_t;
19 
bar(unsigned long x)20 void bar (unsigned long x)
21 {
22   if (x != 0)
23     abort ();
24 }
25 
main()26 int main ()
27 {
28   T one;
29   T two;
30   T tmp1, tmp2;
31 
32   one.whole = 0xFFE0E0E0UL;
33   two.whole = 0xFF000000UL;
34   tmp1.parts = two.parts;
35   tmp2.parts = one.parts;
36   tmp2.parts.c = tmp1.parts.c;
37   one.parts = tmp2.parts;
38 
39   g_t = &one;
40   bar (0);
41   return 0;
42 }
43