int foo1(void) { union { char a[sizeof (unsigned)]; unsigned b; } u; u.b = 0x01; return u.a[0]; } int foo2(void) { volatile union { char a[sizeof (unsigned)]; unsigned b; } u; u.b = 0x01; return u.a[0]; } int main(void) { if (foo1() != foo2()) abort (); exit (0); }