target-6.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /* { dg-additional-options "-Wno-deprecated-declarations" } */
  2. #include <omp.h>
  3. #include <stdlib.h>
  4. int
  5. main ()
  6. {
  7. omp_set_dynamic (0);
  8. omp_set_nested (1);
  9. if (omp_in_parallel ())
  10. abort ();
  11. #pragma omp parallel num_threads (3)
  12. if (omp_get_thread_num () == 2)
  13. {
  14. if (!omp_in_parallel ())
  15. abort ();
  16. #pragma omp parallel num_threads (3)
  17. if (omp_get_thread_num () == 1)
  18. {
  19. if (!omp_in_parallel ()
  20. || omp_get_level () != 2
  21. || omp_get_ancestor_thread_num (0) != 0
  22. || omp_get_ancestor_thread_num (1) != 2
  23. || omp_get_ancestor_thread_num (2) != 1
  24. || omp_get_ancestor_thread_num (3) != -1)
  25. abort ();
  26. #pragma omp target if (0)
  27. {
  28. if (omp_in_parallel ()
  29. || omp_get_level () != 0
  30. || omp_get_ancestor_thread_num (0) != 0
  31. || omp_get_ancestor_thread_num (1) != -1)
  32. abort ();
  33. #pragma omp parallel num_threads (2)
  34. {
  35. if (!omp_in_parallel ()
  36. || omp_get_level () != 1
  37. || omp_get_ancestor_thread_num (0) != 0
  38. || omp_get_ancestor_thread_num (1)
  39. != omp_get_thread_num ()
  40. || omp_get_ancestor_thread_num (2) != -1)
  41. abort ();
  42. }
  43. }
  44. #pragma omp target if (0)
  45. {
  46. #pragma omp teams thread_limit (2)
  47. {
  48. #pragma omp distribute dist_schedule(static,1)
  49. for (int i = 0; i < 1; ++i)
  50. if (omp_in_parallel ()
  51. || omp_get_level () != 0
  52. || omp_get_ancestor_thread_num (0) != 0
  53. || omp_get_ancestor_thread_num (1) != -1)
  54. abort ();
  55. #pragma omp parallel num_threads (2)
  56. {
  57. if (!omp_in_parallel ()
  58. || omp_get_level () != 1
  59. || omp_get_ancestor_thread_num (0) != 0
  60. || omp_get_ancestor_thread_num (1)
  61. != omp_get_thread_num ()
  62. || omp_get_ancestor_thread_num (2) != -1)
  63. abort ();
  64. }
  65. }
  66. }
  67. }
  68. }
  69. return 0;
  70. }