/* PR24716, scalar evolution returning the wrong result for pdest. */ int Link[] = { -1 }; int W[] = { 2 }; extern void abort (void); int f (int k, int p) { int pdest, j, D1361; j = 0; pdest = 0; for (;;) { if (pdest > 2) do j--, pdest++; while (j > 2); if (j == 1) break; while (pdest > p) if (j == p) pdest++; do { D1361 = W[k]; do if (D1361 != 0) pdest = 1, W[k] = D1361 = 0; while (p < 1); } while (k > 0); do { p = 0; k = Link[k]; while (p < j) if (k != -1) pdest++, p++; } while (k != -1); j = 1; } /* The correct return value should be pdest (1 in the call from main). DOM3 is mistaken and propagates a 0 here. */ return pdest; } int main () { if (!f (0, 2)) abort (); return 0; }