/* { dg-do compile } */
/* { dg-options "-O3 -fdump-tree-optimized" } */

static char b = 53;
static unsigned c;
void foo(void);
static int(a)(int d, int e) { return (d ^ e) < 0 ? d : d - e; }
int main() {
  {
    int f = 2;
    c = b;
    b = 0;
    for (; c <= 6;) {
      if (f >= 2)
        f = 0;
      for (; f >= -9; f = a(f, 8))
        if (!(f >= -8 && f <= 0))
          foo();
    }
  }
}


/* { dg-final { scan-tree-dump-not "foo" "optimized" } } */