atomic-13.c 858 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. /* { dg-do run } */
  2. extern void abort (void);
  3. long long l, m;
  4. int i, j;
  5. void
  6. foo (void)
  7. {
  8. #pragma omp atomic read
  9. i = l;
  10. #pragma omp atomic read
  11. m = j;
  12. if (i != 77 || m != 88)
  13. abort ();
  14. #pragma omp atomic write
  15. l = 1 + i + 6 * 1;
  16. #pragma omp atomic write
  17. j = 170 - 170 + m + 1 * 7;
  18. #pragma omp atomic capture
  19. i = l += 4;
  20. #pragma omp atomic capture
  21. m = j += 4;
  22. if (i != 88 || m != 99)
  23. abort ();
  24. #pragma omp atomic capture
  25. {
  26. i = l;
  27. l += 4;
  28. }
  29. #pragma omp atomic capture
  30. {
  31. m = j;
  32. j += 4;
  33. }
  34. if (i != 88 || m != 99)
  35. abort ();
  36. #pragma omp atomic capture
  37. {
  38. l += 4;
  39. i = l;
  40. }
  41. #pragma omp atomic capture
  42. {
  43. j += 4;
  44. m = j;
  45. }
  46. if (i != 96 || m != 107)
  47. abort ();
  48. }
  49. int
  50. main ()
  51. {
  52. l = 77;
  53. j = 88;
  54. foo ();
  55. return 0;
  56. }