/* PR middle-end/25261 */ /* { dg-do run } */ #include extern void abort (void); int main (void) { int i = 5, j, l = 0; int foo (void) { return i == 6; } int bar (void) { return i - 3; } omp_set_dynamic (0); #pragma omp parallel if (foo ()) num_threads (2) if (omp_get_num_threads () != 1) #pragma omp atomic l++; #pragma omp parallel for schedule (static, bar ()) num_threads (2) \ reduction (|:l) for (j = 0; j < 4; j++) if (omp_get_thread_num () != (j >= 2)) #pragma omp atomic l++; i++; #pragma omp parallel if (foo ()) num_threads (2) if (omp_get_num_threads () != 2) #pragma omp atomic l++; #pragma omp parallel for schedule (static, bar ()) num_threads (2) \ reduction (|:l) for (j = 0; j < 6; j++) if (omp_get_thread_num () != (j >= 3)) #pragma omp atomic l++; #pragma omp parallel num_threads (4) reduction (|:l) if (!foo () || bar () != 3) #pragma omp atomic l++; i++; #pragma omp parallel num_threads (4) reduction (|:l) if (foo () || bar () != 4) #pragma omp atomic l++; if (l) abort (); return 0; }