! { dg-do run } integer (kind = 4) :: a, a2 integer (kind = 2) :: b, b2 real :: c double precision :: d, d2, c2 integer, dimension (10) :: e !$omp atomic write a = 1 !$omp atomic write b = 2 !$omp atomic write c = 3 !$omp atomic write d = 4 !$omp atomic capture a2 = a a = a + 4 !$omp end atomic !$omp atomic capture b = b - 18 b2 = b !$omp end atomic !$omp atomic capture c2 = c c = 2.0 * c !$omp end atomic !$omp atomic capture d = d / 2.0 d2 = d !$omp end atomic if (a2 .ne. 1 .or. b2 .ne. -16 .or. c2 .ne. 3 .or. d2 .ne. 2) call abort !$omp atomic read a2 = a !$omp atomic read c2 = c if (a2 .ne. 5 .or. b2 .ne. -16 .or. c2 .ne. 6 .or. d2 .ne. 2) call abort end