1! PR middle-end/45423 - for the original C/C++ testcase 2! { dg-do compile } 3! { dg-options "-fopenmp -fdump-tree-gimple -g0 -Wno-deprecated" } 4! atomicvar should never be referenced in between the barrier and 5! following #pragma omp atomic_load. 6! { dg-final { scan-tree-dump-not "barrier\[^#\]*atomicvar" "gimple" } } 7 8module m 9 implicit none 10 logical :: atomicvar, c 11 integer :: i, atomicvar2, c2 12contains 13integer function foo () 14 !$omp barrier 15 !$omp atomic 16 atomicvar = atomicvar .or. .true. 17 !$omp barrier 18 !$omp atomic 19 atomicvar = atomicvar .or. .false. 20 !$omp barrier 21 !$omp atomic 22 atomicvar = atomicvar .or. c 23 !$omp barrier 24 !$omp atomic 25 atomicvar = atomicvar .and. .true. 26 !$omp barrier 27 !$omp atomic 28 atomicvar = atomicvar .and. .false. 29 !$omp barrier 30 !$omp atomic 31 atomicvar = atomicvar .and. c 32 !$omp barrier 33 !$omp atomic 34 atomicvar = atomicvar .neqv. .true. 35 !$omp barrier 36 !$omp atomic 37 atomicvar = atomicvar .neqv. .false. 38 !$omp barrier 39 !$omp atomic 40 atomicvar = atomicvar .neqv. c 41 !$omp barrier 42 !$omp atomic 43 atomicvar = atomicvar .eqv. .true. 44 !$omp barrier 45 !$omp atomic 46 atomicvar = atomicvar .eqv. .false. 47 !$omp barrier 48 !$omp atomic 49 atomicvar = atomicvar .eqv. c 50 !$omp barrier 51 !$omp atomic 52 atomicvar = .true. .or. atomicvar 53 !$omp barrier 54 !$omp atomic 55 atomicvar = .false. .or. atomicvar 56 !$omp barrier 57 !$omp atomic 58 atomicvar = c .or. atomicvar 59 !$omp barrier 60 !$omp atomic 61 atomicvar = .true. .and. atomicvar 62 !$omp barrier 63 !$omp atomic 64 atomicvar = .false. .and. atomicvar 65 !$omp barrier 66 !$omp atomic 67 atomicvar = c .and. atomicvar 68 !$omp barrier 69 !$omp atomic 70 atomicvar = .true. .neqv. atomicvar 71 !$omp barrier 72 !$omp atomic 73 atomicvar = .false. .neqv. atomicvar 74 !$omp barrier 75 !$omp atomic 76 atomicvar = c .neqv. atomicvar 77 !$omp barrier 78 !$omp atomic 79 atomicvar = .true. .eqv. atomicvar 80 !$omp barrier 81 !$omp atomic 82 atomicvar = .false. .eqv. atomicvar 83 !$omp barrier 84 !$omp atomic 85 atomicvar = c .eqv. atomicvar 86 !$omp barrier 87 foo = 0 88end 89 90integer function bar () 91 !$omp barrier 92 !$omp atomic 93 atomicvar2 = ior (atomicvar2, -1) 94 !$omp barrier 95 !$omp atomic 96 atomicvar2 = ior (atomicvar2, 0) 97 !$omp barrier 98 !$omp atomic 99 atomicvar2 = ior (atomicvar2, 1) 100 !$omp barrier 101 !$omp atomic 102 atomicvar2 = ior (atomicvar2, 2) 103 !$omp barrier 104 !$omp atomic 105 atomicvar2 = ior (atomicvar2, c2) 106 !$omp barrier 107 !$omp atomic 108 atomicvar2 = ior (-1, atomicvar2) 109 !$omp barrier 110 !$omp atomic 111 atomicvar2 = ior (0, atomicvar2) 112 !$omp barrier 113 !$omp atomic 114 atomicvar2 = ior (1, atomicvar2) 115 !$omp barrier 116 !$omp atomic 117 atomicvar2 = ior (2, atomicvar2) 118 !$omp barrier 119 !$omp atomic 120 atomicvar2 = ior (c2, atomicvar2) 121 !$omp barrier 122 !$omp atomic 123 atomicvar2 = ieor (atomicvar2, -1) 124 !$omp barrier 125 !$omp atomic 126 atomicvar2 = ieor (atomicvar2, 0) 127 !$omp barrier 128 !$omp atomic 129 atomicvar2 = ieor (atomicvar2, 1) 130 !$omp barrier 131 !$omp atomic 132 atomicvar2 = ieor (atomicvar2, 2) 133 !$omp barrier 134 !$omp atomic 135 atomicvar2 = ieor (atomicvar2, c2) 136 !$omp barrier 137 !$omp atomic 138 atomicvar2 = ieor (-1, atomicvar2) 139 !$omp barrier 140 !$omp atomic 141 atomicvar2 = ieor (0, atomicvar2) 142 !$omp barrier 143 !$omp atomic 144 atomicvar2 = ieor (1, atomicvar2) 145 !$omp barrier 146 !$omp atomic 147 atomicvar2 = ior (2, atomicvar2) 148 !$omp barrier 149 !$omp atomic 150 atomicvar2 = ior (c2, atomicvar2) 151 !$omp barrier 152 !$omp atomic 153 atomicvar2 = iand (atomicvar2, -1) 154 !$omp barrier 155 !$omp atomic 156 atomicvar2 = iand (atomicvar2, 0) 157 !$omp barrier 158 !$omp atomic 159 atomicvar2 = iand (atomicvar2, 1) 160 !$omp barrier 161 !$omp atomic 162 atomicvar2 = iand (atomicvar2, 2) 163 !$omp barrier 164 !$omp atomic 165 atomicvar2 = iand (atomicvar2, c2) 166 !$omp barrier 167 !$omp atomic 168 atomicvar2 = iand (-1, atomicvar2) 169 !$omp barrier 170 !$omp atomic 171 atomicvar2 = iand (0, atomicvar2) 172 !$omp barrier 173 !$omp atomic 174 atomicvar2 = iand (1, atomicvar2) 175 !$omp barrier 176 !$omp atomic 177 atomicvar2 = iand (2, atomicvar2) 178 !$omp barrier 179 !$omp atomic 180 atomicvar2 = iand (c2, atomicvar2) 181 !$omp barrier 182 !$omp atomic 183 atomicvar2 = min (atomicvar2, -1) 184 !$omp barrier 185 !$omp atomic 186 atomicvar2 = min (atomicvar2, 0) 187 !$omp barrier 188 !$omp atomic 189 atomicvar2 = min (atomicvar2, 1) 190 !$omp barrier 191 !$omp atomic 192 atomicvar2 = min (atomicvar2, 2) 193 !$omp barrier 194 !$omp atomic 195 atomicvar2 = min (atomicvar2, c2) 196 !$omp barrier 197 !$omp atomic 198 atomicvar2 = min (-1, atomicvar2) 199 !$omp barrier 200 !$omp atomic 201 atomicvar2 = min (0, atomicvar2) 202 !$omp barrier 203 !$omp atomic 204 atomicvar2 = min (1, atomicvar2) 205 !$omp barrier 206 !$omp atomic 207 atomicvar2 = min (2, atomicvar2) 208 !$omp barrier 209 !$omp atomic 210 atomicvar2 = min (c2, atomicvar2) 211 !$omp barrier 212 !$omp atomic 213 atomicvar2 = max (atomicvar2, -1) 214 !$omp barrier 215 !$omp atomic 216 atomicvar2 = max (atomicvar2, 0) 217 !$omp barrier 218 !$omp atomic 219 atomicvar2 = max (atomicvar2, 1) 220 !$omp barrier 221 !$omp atomic 222 atomicvar2 = max (atomicvar2, 2) 223 !$omp barrier 224 !$omp atomic 225 atomicvar2 = max (atomicvar2, c2) 226 !$omp barrier 227 !$omp atomic 228 atomicvar2 = max (-1, atomicvar2) 229 !$omp barrier 230 !$omp atomic 231 atomicvar2 = max (0, atomicvar2) 232 !$omp barrier 233 !$omp atomic 234 atomicvar2 = max (1, atomicvar2) 235 !$omp barrier 236 !$omp atomic 237 atomicvar2 = max (2, atomicvar2) 238 !$omp barrier 239 !$omp atomic 240 atomicvar2 = max (c2, atomicvar2) 241 !$omp barrier 242 !$omp atomic 243 atomicvar2 = atomicvar2 + (-1) 244 !$omp barrier 245 !$omp atomic 246 atomicvar2 = atomicvar2 + 0 247 !$omp barrier 248 !$omp atomic 249 atomicvar2 = atomicvar2 + 1 250 !$omp barrier 251 !$omp atomic 252 atomicvar2 = atomicvar2 + 2 253 !$omp barrier 254 !$omp atomic 255 atomicvar2 = atomicvar2 + c2 256 !$omp barrier 257 !$omp atomic 258 atomicvar2 = -1 + atomicvar2 259 !$omp barrier 260 !$omp atomic 261 atomicvar2 = 0 + atomicvar2 262 !$omp barrier 263 !$omp atomic 264 atomicvar2 = 1 + atomicvar2 265 !$omp barrier 266 !$omp atomic 267 atomicvar2 = 2 + atomicvar2 268 !$omp barrier 269 !$omp atomic 270 atomicvar2 = c2 + atomicvar2 271 !$omp barrier 272 !$omp atomic 273 atomicvar2 = atomicvar2 - (-1) 274 !$omp barrier 275 !$omp atomic 276 atomicvar2 = atomicvar2 - 0 277 !$omp barrier 278 !$omp atomic 279 atomicvar2 = atomicvar2 - 1 280 !$omp barrier 281 !$omp atomic 282 atomicvar2 = atomicvar2 - 2 283 !$omp barrier 284 !$omp atomic 285 atomicvar2 = atomicvar2 - c2 286 !$omp barrier 287 !$omp atomic 288 atomicvar2 = -1 - atomicvar2 289 !$omp barrier 290 !$omp atomic 291 atomicvar2 = 0 - atomicvar2 292 !$omp barrier 293 !$omp atomic 294 atomicvar2 = 1 - atomicvar2 295 !$omp barrier 296 !$omp atomic 297 atomicvar2 = 2 - atomicvar2 298 !$omp barrier 299 !$omp atomic 300 atomicvar2 = c2 - atomicvar2 301 !$omp barrier 302 !$omp atomic 303 atomicvar2 = atomicvar2 * (-1) 304 !$omp barrier 305 !$omp atomic 306 atomicvar2 = atomicvar2 * 0 307 !$omp barrier 308 !$omp atomic 309 atomicvar2 = atomicvar2 * 1 310 !$omp barrier 311 !$omp atomic 312 atomicvar2 = atomicvar2 * 2 313 !$omp barrier 314 !$omp atomic 315 atomicvar2 = atomicvar2 * c2 316 !$omp barrier 317 !$omp atomic 318 atomicvar2 = (-1) * atomicvar2 319 !$omp barrier 320 !$omp atomic 321 atomicvar2 = 0 * atomicvar2 322 !$omp barrier 323 !$omp atomic 324 atomicvar2 = 1 * atomicvar2 325 !$omp barrier 326 !$omp atomic 327 atomicvar2 = 2 * atomicvar2 328 !$omp barrier 329 !$omp atomic 330 atomicvar2 = c2 * atomicvar2 331 !$omp barrier 332 !$omp atomic 333 atomicvar2 = atomicvar2 / (-1) 334 !$omp barrier 335 !$omp atomic 336 atomicvar2 = atomicvar2 / 0 337 !$omp barrier 338 !$omp atomic 339 atomicvar2 = atomicvar2 / 1 340 !$omp barrier 341 !$omp atomic 342 atomicvar2 = atomicvar2 / 2 343 !$omp barrier 344 !$omp atomic 345 atomicvar2 = atomicvar2 / c2 346 !$omp barrier 347 !$omp atomic 348 atomicvar2 = (-1) / atomicvar2 349 !$omp barrier 350 !$omp atomic 351 atomicvar2 = 0 / atomicvar2 352 !$omp barrier 353 !$omp atomic 354 atomicvar2 = 1 / atomicvar2 355 !$omp barrier 356 !$omp atomic 357 atomicvar2 = 2 / atomicvar2 358 !$omp barrier 359 !$omp atomic 360 atomicvar2 = c2 / atomicvar2 361 !$omp barrier 362 bar = 0 363end 364end module 365