/* PR middle-end/36802 */ extern void abort (void); extern int omp_set_dynamic (int); extern void omp_set_nested (int); extern int omp_get_num_threads (void); int q; int foo (int k) { int i = 6, n = 0; omp_set_dynamic (0); omp_set_nested (1); #pragma omp parallel shared (i) num_threads (3) { int l; if (omp_get_num_threads () != 3) #pragma omp atomic n += 1; else #pragma omp for for (l = 0; l < 3; l++) if (!k) #pragma omp parallel shared (i) num_threads (4) { if (omp_get_num_threads () != 4) #pragma omp atomic n += 1; #pragma omp critical i += 1; } else #pragma omp atomic q += i; } if (n == 0 && i != 6 + 3 * 4) abort (); return 0; } int main (void) { foo (0); return 0; }