// RUN: %libomp-compile-and-run #include #include #include int a; void inc_a() { #pragma omp task { #pragma omp atomic a++; } } int main() { int n; int nth_outer; omp_set_max_active_levels(2); omp_set_dynamic(0); for (n = 0; n < 200; ++n) { a = 0; #pragma omp parallel num_threads(8) { if (omp_get_thread_num() == 0) nth_outer = omp_get_num_threads(); #pragma omp parallel num_threads(2) { int i; #pragma omp master for (i = 0; i < 50; ++i) inc_a(); } } if (a != nth_outer * 50) { fprintf(stderr, "error: a (%d) != %d\n", a, nth_outer * 50); return EXIT_FAILURE; } } return EXIT_SUCCESS; }