/* { dg-do run } */ /* { dg-additional-options "-fno-tree-pre -fpredictive-commoning" } */ static __attribute__ ((noipa)) void next_set(int *x, int n, int k) { int j = k - 1; int tmp = x[j]++; while (j > 0) { if (x[j] < n - (k - 1 -j)) break; j--; x[j]++; tmp = x[j]; } if (tmp != 2 || j != 1 || x[0] != 0 || x[1] != 2 || x[2] != 5) __builtin_abort (); } int main() { int x[3] = {0, 1, 4}; next_set(x, 5, 3); return 0; }