1  int foo1(void)
       2  {
       3    union {
       4      char a[sizeof (unsigned)];
       5      unsigned b;
       6    } u;
       7    
       8    u.b = 0x01;
       9    return u.a[0];
      10  }
      11  
      12  int foo2(void)
      13  {
      14    volatile union {
      15      char a[sizeof (unsigned)];
      16      unsigned b;
      17    } u;
      18    
      19    u.b = 0x01;
      20    return u.a[0];
      21  }
      22  
      23  int main(void)
      24  {
      25    if (foo1() != foo2())
      26      abort ();
      27    exit (0);
      28  }