12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- /* { dg-additional-options "-Wno-deprecated-declarations" } */
- #include <omp.h>
- #include <stdlib.h>
- #include <string.h>
- int
- main (void)
- {
- int e[3];
- memset (e, '\0', sizeof (e));
- omp_set_nested (1);
- omp_set_dynamic (0);
- if (omp_in_parallel ()
- || omp_get_level () != 0
- || omp_get_ancestor_thread_num (0) != 0
- || omp_get_ancestor_thread_num (-1) != -1
- || omp_get_ancestor_thread_num (1) != -1
- || omp_get_team_size (0) != 1
- || omp_get_team_size (-1) != -1
- || omp_get_team_size (1) != -1
- || omp_get_active_level () != 0)
- abort ();
- #pragma omp parallel num_threads (4)
- {
- int tn1 = omp_get_thread_num ();
- if (omp_in_parallel () != 1
- || omp_get_num_threads () != 4
- || tn1 >= 4 || tn1 < 0
- || omp_get_level () != 1
- || omp_get_ancestor_thread_num (0) != 0
- || omp_get_ancestor_thread_num (1) != tn1
- || omp_get_ancestor_thread_num (-1) != -1
- || omp_get_ancestor_thread_num (2) != -1
- || omp_get_team_size (0) != 1
- || omp_get_team_size (1) != omp_get_num_threads ()
- || omp_get_team_size (-1) != -1
- || omp_get_team_size (2) != -1
- || omp_get_active_level () != 1)
- #pragma omp atomic
- e[0] += 1;
- #pragma omp parallel if (0) num_threads(5) firstprivate(tn1)
- {
- int tn2 = omp_get_thread_num ();
- if (omp_in_parallel () != 1
- || omp_get_num_threads () != 1
- || tn2 != 0
- || omp_get_level () != 2
- || omp_get_ancestor_thread_num (0) != 0
- || omp_get_ancestor_thread_num (1) != tn1
- || omp_get_ancestor_thread_num (2) != tn2
- || omp_get_ancestor_thread_num (-1) != -1
- || omp_get_ancestor_thread_num (3) != -1
- || omp_get_team_size (0) != 1
- || omp_get_team_size (1) != 4
- || omp_get_team_size (2) != 1
- || omp_get_team_size (-1) != -1
- || omp_get_team_size (3) != -1
- || omp_get_active_level () != 1)
- #pragma omp atomic
- e[1] += 1;
- #pragma omp parallel num_threads(2) firstprivate(tn1, tn2)
- {
- int tn3 = omp_get_thread_num ();
- if (omp_in_parallel () != 1
- || omp_get_num_threads () != 2
- || tn3 > 1 || tn3 < 0
- || omp_get_level () != 3
- || omp_get_ancestor_thread_num (0) != 0
- || omp_get_ancestor_thread_num (1) != tn1
- || omp_get_ancestor_thread_num (2) != tn2
- || omp_get_ancestor_thread_num (3) != tn3
- || omp_get_ancestor_thread_num (-1) != -1
- || omp_get_ancestor_thread_num (4) != -1
- || omp_get_team_size (0) != 1
- || omp_get_team_size (1) != 4
- || omp_get_team_size (2) != 1
- || omp_get_team_size (3) != 2
- || omp_get_team_size (-1) != -1
- || omp_get_team_size (4) != -1
- || omp_get_active_level () != 2)
- #pragma omp atomic
- e[2] += 1;
- }
- }
- }
- if (e[0] || e[1] || e[2])
- abort ();
- return 0;
- }
|