00001
00002
00003 extern void abort (void);
00004 int x1, x2, x3, x4, x5;
00005 volatile int y6 = 9, y2, y3, y4, y5;
00006 volatile unsigned char z1, z2, z3, z4, z5;
00007 float a1, a2, a3, a4;
00008
00009 void
00010 f1 (void)
00011 {
00012 #pragma omp atomic
00013 x1++;
00014 #pragma omp atomic
00015 x2--;
00016 #pragma omp atomic
00017 ++x3;
00018 #pragma omp atomic
00019 --x4;
00020 #pragma omp atomic
00021 x5 += 1;
00022 #pragma omp atomic
00023 x1 -= y6;
00024 #pragma omp atomic
00025 x2 |= 1;
00026 #pragma omp atomic
00027 x3 &= 1;
00028 #pragma omp atomic
00029 x4 ^= 1;
00030 #pragma omp atomic
00031 x5 *= 3;
00032 #pragma omp atomic
00033 x1 /= 3;
00034 #pragma omp atomic
00035 x2 /= 3;
00036 #pragma omp atomic
00037 x3 <<= 3;
00038 #pragma omp atomic
00039 x4 >>= 3;
00040 }
00041
00042 void
00043 f2 (void)
00044 {
00045 #pragma omp atomic
00046 y6++;
00047 #pragma omp atomic
00048 y2--;
00049 #pragma omp atomic
00050 ++y3;
00051 #pragma omp atomic
00052 --y4;
00053 #pragma omp atomic
00054 y5 += 1;
00055 #pragma omp atomic
00056 y6 -= x1;
00057 #pragma omp atomic
00058 y2 |= 1;
00059 #pragma omp atomic
00060 y3 &= 1;
00061 #pragma omp atomic
00062 y4 ^= 1;
00063 #pragma omp atomic
00064 y5 *= 3;
00065 #pragma omp atomic
00066 y6 /= 3;
00067 #pragma omp atomic
00068 y2 /= 3;
00069 #pragma omp atomic
00070 y3 <<= 3;
00071 #pragma omp atomic
00072 y4 >>= 3;
00073 }
00074
00075 void
00076 f3 (void)
00077 {
00078 #pragma omp atomic
00079 z1++;
00080 #pragma omp atomic
00081 z2--;
00082 #pragma omp atomic
00083 ++z3;
00084 #pragma omp atomic
00085 --z4;
00086 #pragma omp atomic
00087 z5 += 1;
00088 #pragma omp atomic
00089 z1 |= 1;
00090 #pragma omp atomic
00091 z2 &= 1;
00092 #pragma omp atomic
00093 z3 ^= 1;
00094 #pragma omp atomic
00095 z4 *= 3;
00096 #pragma omp atomic
00097 z5 /= 3;
00098 #pragma omp atomic
00099 z1 /= 3;
00100 #pragma omp atomic
00101 z2 <<= 3;
00102 #pragma omp atomic
00103 z3 >>= 3;
00104 }
00105
00106 void
00107 f4 (void)
00108 {
00109 #pragma omp atomic
00110 a1 += 8.0;
00111 #pragma omp atomic
00112 a2 *= 3.5;
00113 #pragma omp atomic
00114 a3 -= a1 + a2;
00115 #pragma omp atomic
00116 a4 /= 2.0;
00117 }
00118
00119 int
00120 main (void)
00121 {
00122 f1 ();
00123 if (x1 != -2 || x2 != 0 || x3 != 8 || x4 != -1 || x5 != 3)
00124 abort ();
00125 f2 ();
00126 if (y6 != 4 || y2 != 0 || y3 != 8 || y4 != -1 || y5 != 3)
00127 abort ();
00128 f3 ();
00129 if (z1 != 0 || z2 != 8 || z3 != 0 || z4 != 253 || z5 != 0)
00130 abort ();
00131 a1 = 7;
00132 a2 = 10;
00133 a3 = 11;
00134 a4 = 13;
00135 f4 ();
00136 if (a1 != 15.0 || a2 != 35.0 || a3 != -39.0 || a4 != 6.5)
00137 abort ();
00138 return 0;
00139 }