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