! { dg-do run } ! ! Test data located inside common blocks. This test does not exercise ! ACC DECLARE. Most of the data clauses are implicit. module consts integer, parameter :: n = 100 end module consts subroutine validate use consts implicit none integer i, j real*4 x(n), y(n), z common /BLOCK/ x, y, z, j do i = 1, n if (abs(x(i) - i - z) .ge. 0.0001) call abort end do end subroutine validate subroutine incr_parallel use consts implicit none integer i, j real*4 x(n), y(n), z common /BLOCK/ x, y, z, j !$acc parallel loop do i = 1, n x(i) = x(i) + z end do !$acc end parallel loop end subroutine incr_parallel subroutine incr_kernels use consts implicit none integer i, j real*4 x(n), y(n), z common /BLOCK/ x, y, z, j !$acc kernels do i = 1, n x(i) = x(i) + z end do !$acc end kernels end subroutine incr_kernels program main use consts implicit none integer i, j real*4 a(n), b(n), c common /BLOCK/ a, b, c, j !$acc data copyout(a, c) c = 1.0 !$acc update device(c) !$acc parallel loop do i = 1, n a(i) = i end do !$acc end parallel loop call incr_parallel call incr_parallel call incr_parallel !$acc end data c = 3.0 call validate ! Test pcopy without copyout c = 2.0 call incr_kernels c = 5.0 call validate !$acc kernels do i = 1, n b(i) = i end do !$acc end kernels !$acc parallel loop do i = 1, n a(i) = b(i) + c end do !$acc end parallel loop call validate a(:) = b(:) c = 0.0 call validate ! Test copy c = 1.0 !$acc parallel loop do i = 1, n a(i) = b(i) + c end do !$acc end parallel loop call validate c = 2.0 !$acc data copyin(b, c) copyout(a) !$acc kernels do i = 1, n a(i) = b(i) + c end do !$acc end kernels !$acc end data call validate j = 0 !$acc parallel loop reduction(+:j) do i = 1, n j = j + 1 end do !$acc end parallel loop if (j .ne. n) call abort end program main