nestedfn-1.c 844 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /* { dg-do run } */
  2. #include <omp.h>
  3. #include <stdlib.h>
  4. int
  5. main (void)
  6. {
  7. int a = 1, b = 2, c = 3;
  8. void
  9. foo (void)
  10. {
  11. int l = 0;
  12. #pragma omp parallel shared (a) private (b) firstprivate (c) \
  13. num_threads (2) reduction (||:l)
  14. {
  15. if (a != 1 || c != 3) l = 1;
  16. #pragma omp barrier
  17. if (omp_get_thread_num () == 0)
  18. {
  19. a = 4;
  20. b = 5;
  21. c = 6;
  22. }
  23. #pragma omp barrier
  24. if (omp_get_thread_num () == 1)
  25. {
  26. if (a != 4 || c != 3) l = 1;
  27. a = 7;
  28. b = 8;
  29. c = 9;
  30. }
  31. else if (omp_get_num_threads () == 1)
  32. a = 7;
  33. #pragma omp barrier
  34. if (omp_get_thread_num () == 0)
  35. if (a != 7 || b != 5 || c != 6) l = 1;
  36. #pragma omp barrier
  37. if (omp_get_thread_num () == 1)
  38. if (a != 7 || b != 8 || c != 9) l = 1;
  39. }
  40. if (l)
  41. abort ();
  42. }
  43. foo ();
  44. if (a != 7)
  45. abort ();
  46. return 0;
  47. }