pr35130.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. /* PR middle-end/35130 */
  2. extern void abort (void);
  3. void
  4. f1 (void)
  5. {
  6. int a[4], k;
  7. void nested (int x)
  8. {
  9. a[x] = 42;
  10. }
  11. for (k = 0; k < 4; k++)
  12. a[k] = 0;
  13. #pragma omp parallel for
  14. for (k = 0; k < 4; k++)
  15. nested (k);
  16. if (a[0] != 42 || a[1] != 42 || a[2] != 42 || a[3] != 42)
  17. abort ();
  18. }
  19. void
  20. f2 (void)
  21. {
  22. int a[4], k;
  23. void nested (void)
  24. {
  25. int l;
  26. void nested2 (int x)
  27. {
  28. a[x] = 42;
  29. }
  30. #pragma omp parallel for
  31. for (l = 0; l < 4; l++)
  32. nested2 (l);
  33. }
  34. for (k = 0; k < 4; k++)
  35. a[k] = 0;
  36. nested ();
  37. if (a[0] != 42 || a[1] != 42 || a[2] != 42 || a[3] != 42)
  38. abort ();
  39. }
  40. void
  41. f3 (void)
  42. {
  43. int a[4], b[4], c[4], k;
  44. void nested (int x)
  45. {
  46. a[x] = b[x] = c[x] = 42;
  47. }
  48. for (k = 0; k < 4; k++)
  49. a[k] = b[k] = c[k] = 0;
  50. nested (0);
  51. #pragma omp parallel
  52. {
  53. #pragma omp single
  54. {
  55. a[1] = 43;
  56. b[1] = 43;
  57. }
  58. #pragma omp parallel
  59. {
  60. #pragma omp single
  61. {
  62. b[2] = 44;
  63. c[2] = 44;
  64. }
  65. }
  66. }
  67. if (a[0] != 42 || a[1] != 43 || a[2] != 0 || a[3] != 0)
  68. abort ();
  69. if (b[0] != 42 || b[1] != 43 || b[2] != 44 || b[3] != 0)
  70. abort ();
  71. if (c[0] != 42 || c[1] != 0 || c[2] != 44 || c[3] != 0)
  72. abort ();
  73. }
  74. void
  75. f4 (void)
  76. {
  77. int a[4], b[4], c[4], k;
  78. void nested ()
  79. {
  80. #pragma omp parallel
  81. {
  82. #pragma omp single
  83. {
  84. a[1] = 43;
  85. b[1] = 43;
  86. }
  87. #pragma omp parallel
  88. {
  89. #pragma omp single
  90. {
  91. b[2] = 44;
  92. c[2] = 44;
  93. }
  94. }
  95. }
  96. }
  97. for (k = 0; k < 4; k++)
  98. a[k] = b[k] = c[k] = k == 0 ? 42 : 0;
  99. nested ();
  100. if (a[0] != 42 || a[1] != 43 || a[2] != 0 || a[3] != 0)
  101. abort ();
  102. if (b[0] != 42 || b[1] != 43 || b[2] != 44 || b[3] != 0)
  103. abort ();
  104. if (c[0] != 42 || c[1] != 0 || c[2] != 44 || c[3] != 0)
  105. abort ();
  106. }
  107. int
  108. main (void)
  109. {
  110. f1 ();
  111. f2 ();
  112. f3 ();
  113. f4 ();
  114. return 0;
  115. }