! { dg-do run } module param integer, parameter :: N = 32 end module param program main use param integer :: i integer :: a(N) do i = 1, N a(i) = i end do !$acc parallel copy (a) !$acc loop worker do i = 1, N call vector (a) end do !$acc end parallel do i = 1, N if (a(i) .ne. 0) stop 1 end do contains subroutine vector (a) !$acc routine vector integer, intent (inout) :: a(N) integer :: i !$acc loop vector do i = 1, N a(i) = a(i) - a(i) end do end subroutine vector end program main