| ! PR fortran/92899 |
| |
| program pr92899 |
| real :: x = 1.0 |
| double precision :: y |
| integer(kind=4) :: z = 4 |
| integer(kind=8) :: w |
| !$omp atomic capture |
| y = x |
| x = 2.0 |
| !$omp end atomic |
| if (y /= 1.0 .or. x /= 2.0) stop 1 |
| !$omp atomic capture |
| x = y |
| y = 3.0 |
| !$omp end atomic |
| if (x /= 1.0 .or. y /= 3.0) stop 2 |
| !$omp atomic capture |
| w = z |
| z = 5 |
| !$omp end atomic |
| if (w /= 4 .or. z /= 5) stop 3 |
| !$omp atomic capture |
| z = w |
| w = 6 |
| !$omp end atomic |
| if (z /= 4 .or. w /= 6) stop 4 |
| !$omp atomic write |
| x = y |
| !$omp end atomic |
| if (x /= 3.0 .or. y /= 3.0) stop 5 |
| x = 7.0 |
| !$omp atomic write |
| y = x |
| !$omp end atomic |
| if (x /= 7.0 .or. y /= 7.0) stop 6 |
| !$omp atomic write |
| z = w |
| !$omp end atomic |
| if (z /= 6 .or. w /= 6) stop 7 |
| z = 8 |
| !$omp atomic write |
| w = z |
| !$omp end atomic |
| if (z /= 8 .or. w /= 8) stop 8 |
| end |