1*404b540aSrobert /* { dg-do run } */
2*404b540aSrobert /* { dg-options "-O2 -fopenmp" } */
3*404b540aSrobert
4*404b540aSrobert extern void abort (void);
5*404b540aSrobert int x1, x2, x3, x4, x5;
6*404b540aSrobert volatile int y6 = 9, y2, y3, y4, y5;
7*404b540aSrobert volatile unsigned char z1, z2, z3, z4, z5;
8*404b540aSrobert float a1, a2, a3, a4;
9*404b540aSrobert
10*404b540aSrobert void
f1(void)11*404b540aSrobert f1 (void)
12*404b540aSrobert {
13*404b540aSrobert #pragma omp atomic
14*404b540aSrobert x1++;
15*404b540aSrobert #pragma omp atomic
16*404b540aSrobert x2--;
17*404b540aSrobert #pragma omp atomic
18*404b540aSrobert ++x3;
19*404b540aSrobert #pragma omp atomic
20*404b540aSrobert --x4;
21*404b540aSrobert #pragma omp atomic
22*404b540aSrobert x5 += 1;
23*404b540aSrobert #pragma omp atomic
24*404b540aSrobert x1 -= y6;
25*404b540aSrobert #pragma omp atomic
26*404b540aSrobert x2 |= 1;
27*404b540aSrobert #pragma omp atomic
28*404b540aSrobert x3 &= 1;
29*404b540aSrobert #pragma omp atomic
30*404b540aSrobert x4 ^= 1;
31*404b540aSrobert #pragma omp atomic
32*404b540aSrobert x5 *= 3;
33*404b540aSrobert #pragma omp atomic
34*404b540aSrobert x1 /= 3;
35*404b540aSrobert #pragma omp atomic
36*404b540aSrobert x2 /= 3;
37*404b540aSrobert #pragma omp atomic
38*404b540aSrobert x3 <<= 3;
39*404b540aSrobert #pragma omp atomic
40*404b540aSrobert x4 >>= 3;
41*404b540aSrobert }
42*404b540aSrobert
43*404b540aSrobert void
f2(void)44*404b540aSrobert f2 (void)
45*404b540aSrobert {
46*404b540aSrobert #pragma omp atomic
47*404b540aSrobert y6++;
48*404b540aSrobert #pragma omp atomic
49*404b540aSrobert y2--;
50*404b540aSrobert #pragma omp atomic
51*404b540aSrobert ++y3;
52*404b540aSrobert #pragma omp atomic
53*404b540aSrobert --y4;
54*404b540aSrobert #pragma omp atomic
55*404b540aSrobert y5 += 1;
56*404b540aSrobert #pragma omp atomic
57*404b540aSrobert y6 -= x1;
58*404b540aSrobert #pragma omp atomic
59*404b540aSrobert y2 |= 1;
60*404b540aSrobert #pragma omp atomic
61*404b540aSrobert y3 &= 1;
62*404b540aSrobert #pragma omp atomic
63*404b540aSrobert y4 ^= 1;
64*404b540aSrobert #pragma omp atomic
65*404b540aSrobert y5 *= 3;
66*404b540aSrobert #pragma omp atomic
67*404b540aSrobert y6 /= 3;
68*404b540aSrobert #pragma omp atomic
69*404b540aSrobert y2 /= 3;
70*404b540aSrobert #pragma omp atomic
71*404b540aSrobert y3 <<= 3;
72*404b540aSrobert #pragma omp atomic
73*404b540aSrobert y4 >>= 3;
74*404b540aSrobert }
75*404b540aSrobert
76*404b540aSrobert void
f3(void)77*404b540aSrobert f3 (void)
78*404b540aSrobert {
79*404b540aSrobert #pragma omp atomic
80*404b540aSrobert z1++;
81*404b540aSrobert #pragma omp atomic
82*404b540aSrobert z2--;
83*404b540aSrobert #pragma omp atomic
84*404b540aSrobert ++z3;
85*404b540aSrobert #pragma omp atomic
86*404b540aSrobert --z4;
87*404b540aSrobert #pragma omp atomic
88*404b540aSrobert z5 += 1;
89*404b540aSrobert #pragma omp atomic
90*404b540aSrobert z1 |= 1;
91*404b540aSrobert #pragma omp atomic
92*404b540aSrobert z2 &= 1;
93*404b540aSrobert #pragma omp atomic
94*404b540aSrobert z3 ^= 1;
95*404b540aSrobert #pragma omp atomic
96*404b540aSrobert z4 *= 3;
97*404b540aSrobert #pragma omp atomic
98*404b540aSrobert z5 /= 3;
99*404b540aSrobert #pragma omp atomic
100*404b540aSrobert z1 /= 3;
101*404b540aSrobert #pragma omp atomic
102*404b540aSrobert z2 <<= 3;
103*404b540aSrobert #pragma omp atomic
104*404b540aSrobert z3 >>= 3;
105*404b540aSrobert }
106*404b540aSrobert
107*404b540aSrobert void
f4(void)108*404b540aSrobert f4 (void)
109*404b540aSrobert {
110*404b540aSrobert #pragma omp atomic
111*404b540aSrobert a1 += 8.0;
112*404b540aSrobert #pragma omp atomic
113*404b540aSrobert a2 *= 3.5;
114*404b540aSrobert #pragma omp atomic
115*404b540aSrobert a3 -= a1 + a2;
116*404b540aSrobert #pragma omp atomic
117*404b540aSrobert a4 /= 2.0;
118*404b540aSrobert }
119*404b540aSrobert
120*404b540aSrobert int
main(void)121*404b540aSrobert main (void)
122*404b540aSrobert {
123*404b540aSrobert f1 ();
124*404b540aSrobert if (x1 != -2 || x2 != 0 || x3 != 8 || x4 != -1 || x5 != 3)
125*404b540aSrobert abort ();
126*404b540aSrobert f2 ();
127*404b540aSrobert if (y6 != 4 || y2 != 0 || y3 != 8 || y4 != -1 || y5 != 3)
128*404b540aSrobert abort ();
129*404b540aSrobert f3 ();
130*404b540aSrobert if (z1 != 0 || z2 != 8 || z3 != 0 || z4 != 253 || z5 != 0)
131*404b540aSrobert abort ();
132*404b540aSrobert a1 = 7;
133*404b540aSrobert a2 = 10;
134*404b540aSrobert a3 = 11;
135*404b540aSrobert a4 = 13;
136*404b540aSrobert f4 ();
137*404b540aSrobert if (a1 != 15.0 || a2 != 35.0 || a3 != -39.0 || a4 != 6.5)
138*404b540aSrobert abort ();
139*404b540aSrobert return 0;
140*404b540aSrobert }
141