pr69389.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. /* PR c/69389 */
  2. struct S { unsigned int a : 10; unsigned int b : 4; unsigned int c : 18; } s = { 210, 11, 1235 };
  3. unsigned int
  4. f1 (void)
  5. {
  6. unsigned int v;
  7. #pragma omp atomic read
  8. v = s.b;
  9. return v;
  10. }
  11. void
  12. f2 (unsigned int v)
  13. {
  14. #pragma omp atomic write
  15. s.b = v;
  16. }
  17. void
  18. f3 (void)
  19. {
  20. #pragma omp atomic
  21. s.b |= 1;
  22. }
  23. int
  24. f4 (void)
  25. {
  26. int v;
  27. #pragma omp atomic capture
  28. v = s.b += 8;
  29. return v;
  30. }
  31. int
  32. f5 (void)
  33. {
  34. int v;
  35. #pragma omp atomic capture
  36. {
  37. v = s.b;
  38. s.b -= 4;
  39. }
  40. return v;
  41. }
  42. void
  43. f6 (void)
  44. {
  45. #pragma omp atomic
  46. s.b = s.b & 7;
  47. }
  48. void
  49. f7 (void)
  50. {
  51. #pragma omp atomic
  52. s.b = ~7 & s.b;
  53. }
  54. int
  55. f8 (void)
  56. {
  57. int v;
  58. #pragma omp atomic capture
  59. v = s.b = 8 + s.b;
  60. return v;
  61. }
  62. int
  63. f9 (void)
  64. {
  65. int v;
  66. #pragma omp atomic capture
  67. {
  68. v = s.b;
  69. s.b = s.b - 4;
  70. }
  71. return v;
  72. }
  73. int
  74. main ()
  75. {
  76. if (f1 () != 11)
  77. __builtin_abort ();
  78. f2 (4);
  79. if (s.a != 210 || s.b != 4 || s.c != 1235)
  80. __builtin_abort ();
  81. s.a = 813;
  82. s.c = 31532;
  83. if (f1 () != 4)
  84. __builtin_abort ();
  85. f3 ();
  86. if (f1 () != 5)
  87. __builtin_abort ();
  88. if (s.a != 813 || s.b != 5 || s.c != 31532)
  89. __builtin_abort ();
  90. if (f4 () != 13)
  91. __builtin_abort ();
  92. if (f1 () != 13)
  93. __builtin_abort ();
  94. f2 (14);
  95. if (s.a != 813 || s.b != 14 || s.c != 31532)
  96. __builtin_abort ();
  97. if (f5 () != 14)
  98. __builtin_abort ();
  99. if (f1 () != 10 || s.a != 813 || s.b != 10 || s.c != 31532)
  100. __builtin_abort ();
  101. f6 ();
  102. if (f1 () != 2)
  103. __builtin_abort ();
  104. f2 (15);
  105. f7 ();
  106. if (f1 () != 8)
  107. __builtin_abort ();
  108. if (f8 () != 0 || s.a != 813 || s.b != 0 || s.c != 31532)
  109. __builtin_abort ();
  110. if (f9 () != 0 || s.a != 813 || s.b != 12 || s.c != 31532)
  111. __builtin_abort ();
  112. return 0;
  113. }