atomic-2.C 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. // { dg-do run }
  2. extern "C" void abort (void);
  3. int x = 6;
  4. float y;
  5. int
  6. main (void)
  7. {
  8. int v;
  9. float f;
  10. #pragma omp atomic read
  11. v = x;
  12. if (v != 6)
  13. abort ();
  14. #pragma omp atomic write
  15. x = 17;
  16. #pragma omp atomic read
  17. v = x;
  18. if (v != 17)
  19. abort ();
  20. #pragma omp atomic update
  21. x++;
  22. #pragma omp atomic read
  23. v = x;
  24. if (v != 18)
  25. abort ();
  26. #pragma omp atomic capture
  27. v = x++;
  28. if (v != 18)
  29. abort ();
  30. #pragma omp atomic read
  31. v = x;
  32. if (v != 19)
  33. abort ();
  34. #pragma omp atomic capture
  35. v = ++x;
  36. if (v != 20)
  37. abort ();
  38. #pragma omp atomic read
  39. v = x;
  40. if (v != 20)
  41. abort ();
  42. #pragma omp atomic capture
  43. { v = x; x *= 3; }
  44. if (v != 20)
  45. abort ();
  46. #pragma omp atomic read
  47. v = x;
  48. if (v != 60)
  49. abort ();
  50. #pragma omp atomic capture
  51. {
  52. x |= 2;
  53. v = x;
  54. }
  55. if (v != 62)
  56. abort ();
  57. #pragma omp atomic read
  58. v = x;
  59. if (v != 62)
  60. abort ();
  61. #pragma omp atomic capture
  62. { v = x; x++; }
  63. if (v != 62)
  64. abort ();
  65. #pragma omp atomic capture
  66. { v = x; ++x; }
  67. if (v != 63)
  68. abort ();
  69. #pragma omp atomic capture
  70. {
  71. ++x;
  72. v = x;
  73. }
  74. if (v != 65)
  75. abort ();
  76. #pragma omp atomic capture
  77. {x++;v=x;}if (v != 66)
  78. abort ();
  79. #pragma omp atomic read
  80. v = x;
  81. if (v != 66)
  82. abort ();
  83. #pragma omp atomic capture
  84. { v = x; x--; }
  85. if (v != 66)
  86. abort ();
  87. #pragma omp atomic capture
  88. { v = x; --x; }
  89. if (v != 65)
  90. abort ();
  91. #pragma omp atomic capture
  92. {
  93. --x;
  94. v = x;
  95. }
  96. if (v != 63)
  97. abort ();
  98. #pragma omp atomic capture
  99. { x--; v = x; } if (v != 62)
  100. abort ();
  101. #pragma omp atomic read
  102. v = x;
  103. if (v != 62)
  104. abort ();
  105. #pragma omp atomic write
  106. y = 17.5f;
  107. #pragma omp atomic read
  108. f = y;
  109. if (f != 17.5)
  110. abort ();
  111. #pragma omp atomic update
  112. y *= 2.0f;
  113. #pragma omp atomic read
  114. f = y;
  115. if (y != 35.0)
  116. abort ();
  117. #pragma omp atomic capture
  118. f = y *= 2.0f;
  119. if (f != 70.0)
  120. abort ();
  121. #pragma omp atomic capture
  122. f = y++;
  123. if (f != 70.0)
  124. abort ();
  125. #pragma omp atomic read
  126. f = y;
  127. if (f != 71.0)
  128. abort ();
  129. #pragma omp atomic capture
  130. f = --y;
  131. if (f != 70.0)
  132. abort ();
  133. #pragma omp atomic read
  134. f = y;
  135. if (f != 70.0)
  136. abort ();
  137. #pragma omp atomic capture
  138. { f = y; y /= 2.0f; }
  139. if (f != 70.0)
  140. abort ();
  141. #pragma omp atomic read
  142. f = y;
  143. if (f != 35.0)
  144. abort ();
  145. #pragma omp atomic capture
  146. { y /= 2.0f; f = y; }
  147. if (f != 17.5)
  148. abort ();
  149. #pragma omp atomic read
  150. f = y;
  151. if (f != 17.5)
  152. abort ();
  153. return 0;
  154. }