/* { dg-do run } */ /* { dg-options "-O1" } */ #include typedef union { struct { unsigned char a; unsigned char b; unsigned char c; unsigned char d; } parts; unsigned long whole; } T; T *g_t; void bar (unsigned long x) { if (x != 0) abort (); } int main () { T one; T two; T tmp1, tmp2; one.whole = 0xFFE0E0E0UL; two.whole = 0xFF000000UL; tmp1.parts = two.parts; tmp2.parts = one.parts; tmp2.parts.c = tmp1.parts.c; one.parts = tmp2.parts; g_t = &one; bar (0); return 0; }