! { dg-do run } real, dimension (20) :: r integer, dimension (20) :: d integer :: i, j, k, n integer (kind = 2) :: a, b, c do 10 i = 1, 20 r(i) = i 10 d(i) = 21 - i n = 20 call foo (r, d, n) if (n .ne. 22) call abort if (any (r .ne. 33)) call abort i = 1 j = 18 k = 23 !$omp atomic i = min (i, j, k, n) if (i .ne. 1) call abort !$omp atomic i = max (j, n, k, i) if (i .ne. 23) call abort a = 1 b = 18 c = 23 !$omp atomic a = min (a, b, c) if (a .ne. 1) call abort !$omp atomic a = max (a, b, c) if (a .ne. 23) call abort contains function bar (i) real bar integer i bar = 12.0 + i end function bar subroutine foo (x, y, n) integer i, y (*), n real x (*) do i = 1, n !$omp atomic x(y(i)) = x(y(i)) + bar (i) end do !$omp atomic n = n + 2 end subroutine foo end