/* { dg-do run } */ #ifndef __cplusplus extern void abort (void); #else extern "C" void abort (void); #endif static int inner_loop_count = 0; static int intervening_code_count = 0; void g (int x, int y) { inner_loop_count++; } int foo (int imax, int jmax) { int j = 0; #pragma omp for collapse(2) for (int i = 0; i < imax; ++i) { /* All the intervening code at the same level must be executed the same number of times. */ ++intervening_code_count; for (int j = 0; j < jmax; ++j) { g (i, j); } /* This is the outer j, not the one from the inner collapsed loop. */ ++j; } return j; } int main (void) { int j = foo (5, 3); if (j != intervening_code_count) abort (); if (inner_loop_count != 5 * 3) abort (); if (intervening_code_count < 5 || intervening_code_count > 5 * 3) abort (); }