1  /* { dg-do run } */
       2  /* { dg-options "-O2" } */
       3  /* { dg-require-effective-target ia32 } */
       4  int a, b, c, d, e[2], f, l, m, n, o;
       5  long long g = 1, j;
       6  static unsigned int h;
       7  static int i, k;
       8  
       9  void
      10  fn1 (long long p)
      11  {
      12    int q = p;
      13    f = 1 ^ e[f ^ (q & 1)];
      14  }
      15  
      16  static void
      17  fn2 (long long p)
      18  {
      19    f = 1 ^ e[(f ^ 1) & 1];
      20    fn1 (p >> 1 & 1);
      21    fn1 (p >> 32 & 1);
      22  }
      23  
      24  void
      25  fn3 (int p)
      26  {
      27    g |= j = p;
      28  }
      29  
      30  int
      31  main ()
      32  {
      33    e[0] = 1;
      34    char p = l;
      35    h = --g;
      36    i = o = c;
      37    m = d ? 1 / d : 0;
      38    fn3 (l || 0);
      39    b = a;
      40    n = j++;
      41    k--;
      42    fn2 (g);
      43    fn2 (h);
      44    fn2 (i);
      45  
      46    if (k + f)
      47      __builtin_abort ();
      48  
      49    return 0;
      50  }
      51