atomic-17.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. // { dg-do run }
  2. extern void abort (void);
  3. int x = 6;
  4. int
  5. main ()
  6. {
  7. int v, l = 2, s = 1;
  8. #pragma omp atomic seq_cst
  9. x = -3 + x;
  10. #pragma omp atomic read seq_cst
  11. v = x;
  12. if (v != 3)
  13. abort ();
  14. #pragma omp atomic seq_cst update
  15. x = 3 * 2 * 1 + x;
  16. #pragma omp atomic read, seq_cst
  17. v = x;
  18. if (v != 9)
  19. abort ();
  20. #pragma omp atomic seq_cst, capture
  21. v = x = x | 16;
  22. if (v != 25)
  23. abort ();
  24. #pragma omp atomic capture seq_cst
  25. v = x = x + 14 * 2 / 4;
  26. if (v != 32)
  27. abort ();
  28. #pragma omp atomic seq_cst capture
  29. v = x = 5 | x;
  30. if (v != 37)
  31. abort ();
  32. #pragma omp atomic capture, seq_cst
  33. v = x = 40 + 12 - 2 - 7 - x;
  34. if (v != 6)
  35. abort ();
  36. #pragma omp atomic seq_cst read
  37. v = x;
  38. if (v != 6)
  39. abort ();
  40. #pragma omp atomic capture seq_cst
  41. { v = x; x = 3 + x; }
  42. if (v != 6)
  43. abort ();
  44. #pragma omp atomic seq_cst capture
  45. { v = x; x = -1 * -1 * -1 * -1 - x; }
  46. if (v != 9)
  47. abort ();
  48. #pragma omp atomic read seq_cst
  49. v = x;
  50. if (v != -8)
  51. abort ();
  52. #pragma omp atomic capture, seq_cst
  53. { x = 2 * 2 - x; v = x; }
  54. if (v != 12)
  55. abort ();
  56. #pragma omp atomic seq_cst capture
  57. { x = 7 & x; v = x; }
  58. if (v != 4)
  59. abort ();
  60. #pragma omp atomic capture seq_cst
  61. { v = x; x = 6; }
  62. if (v != 4)
  63. abort ();
  64. #pragma omp atomic read, seq_cst
  65. v = x;
  66. if (v != 6)
  67. abort ();
  68. #pragma omp atomic capture seq_cst
  69. { v = x; x = 7 * 8 + 23; }
  70. if (v != 6)
  71. abort ();
  72. #pragma omp atomic seq_cst, read
  73. v = x;
  74. if (v != 79)
  75. abort ();
  76. #pragma omp atomic capture , seq_cst
  77. { v = x; x = 23 + 6 * 4; }
  78. if (v != 79)
  79. abort ();
  80. #pragma omp atomic read seq_cst
  81. v = x;
  82. if (v != 47)
  83. abort ();
  84. #pragma omp atomic seq_cst capture
  85. { v = x; x = l ? 17 : 12; }
  86. if (v != 47)
  87. abort ();
  88. #pragma omp atomic capture seq_cst
  89. { v = x; x = l = s++ + 3; }
  90. if (v != 17 || l != 4 || s != 2)
  91. abort ();
  92. #pragma omp atomic read seq_cst
  93. v = x;
  94. if (v != 4)
  95. abort ();
  96. return 0;
  97. }