1*404b540aSrobert! { dg-do run } 2*404b540aSrobert real, dimension (20) :: r 3*404b540aSrobert integer, dimension (20) :: d 4*404b540aSrobert integer :: i, j, k, n 5*404b540aSrobert integer (kind = 2) :: a, b, c 6*404b540aSrobert 7*404b540aSrobert do 10 i = 1, 20 8*404b540aSrobert r(i) = i 9*404b540aSrobert10 d(i) = 21 - i 10*404b540aSrobert 11*404b540aSrobert n = 20 12*404b540aSrobert call foo (r, d, n) 13*404b540aSrobert 14*404b540aSrobert if (n .ne. 22) call abort 15*404b540aSrobert if (any (r .ne. 33)) call abort 16*404b540aSrobert 17*404b540aSrobert i = 1 18*404b540aSrobert j = 18 19*404b540aSrobert k = 23 20*404b540aSrobert!$omp atomic 21*404b540aSrobert i = min (i, j, k, n) 22*404b540aSrobert if (i .ne. 1) call abort 23*404b540aSrobert!$omp atomic 24*404b540aSrobert i = max (j, n, k, i) 25*404b540aSrobert if (i .ne. 23) call abort 26*404b540aSrobert 27*404b540aSrobert a = 1 28*404b540aSrobert b = 18 29*404b540aSrobert c = 23 30*404b540aSrobert!$omp atomic 31*404b540aSrobert a = min (a, b, c) 32*404b540aSrobert if (a .ne. 1) call abort 33*404b540aSrobert!$omp atomic 34*404b540aSrobert a = max (a, b, c) 35*404b540aSrobert if (a .ne. 23) call abort 36*404b540aSrobert 37*404b540aSrobertcontains 38*404b540aSrobert function bar (i) 39*404b540aSrobert real bar 40*404b540aSrobert integer i 41*404b540aSrobert bar = 12.0 + i 42*404b540aSrobert end function bar 43*404b540aSrobert 44*404b540aSrobert subroutine foo (x, y, n) 45*404b540aSrobert integer i, y (*), n 46*404b540aSrobert real x (*) 47*404b540aSrobert do i = 1, n 48*404b540aSrobert!$omp atomic 49*404b540aSrobert x(y(i)) = x(y(i)) + bar (i) 50*404b540aSrobert end do 51*404b540aSrobert!$omp atomic 52*404b540aSrobert n = n + 2 53*404b540aSrobert end subroutine foo 54*404b540aSrobertend 55