/* PR tree-optimization/18694

   The dominator optimization didn't take the PHI evaluation order
   into account when threading an edge.  */

extern void abort(void) __attribute__((noreturn));
extern void exit(int) __attribute__((noreturn));

void __attribute__((noinline))
foo(int i) {
    int next_n = 1;
    int j = 0;

    for (; i != 0; i--) {
        int n;

        for (n = next_n; j < n; j++)
            next_n++;

        if (j != n)
            abort();
    }
}

int main(void) {
    foo(2);
    exit(0);
}
