1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
! { dg-do compile }
! { dg-additional-options "-fcoarray=lib" }
!
! PR fortran/63861
module test
contains
subroutine oacc1(a)
implicit none
integer :: i
integer, codimension[*] :: a
!$acc declare device_resident (a)
!$acc data copy (a)
!$acc end data
!$acc data deviceptr (a)
!$acc end data
!$acc parallel private (a)
!$acc end parallel
!$acc host_data use_device (a)
!$acc end host_data
!$acc parallel loop reduction(+:a) ! { dg-error "Array 'a' is not permitted in reduction" }
do i = 1,5
enddo
!$acc end parallel loop
!$acc parallel loop
do i = 1,5
enddo
!$acc end parallel loop
!$acc update device (a)
!$acc update host (a)
!$acc update self (a)
end subroutine oacc1
subroutine oacc2(a)
implicit none
integer :: i
integer, allocatable, codimension[:] :: a
!$acc declare device_resident (a)
!$acc data copy (a)
!$acc end data
!$acc parallel private (a)
!$acc end parallel
! FIXME:
! !$acc parallel loop reduction(+:a)
! This involves an assignment, which shall not reallocate
! the LHS variable. Version without reduction:
!$acc parallel loop
do i = 1,5
enddo
!$acc end parallel loop
!$acc parallel loop
do i = 1,5
enddo
!$acc end parallel loop
!$acc update device (a)
!$acc update host (a)
!$acc update self (a)
end subroutine oacc2
subroutine oacc3(a)
implicit none
integer :: i
integer, codimension[*] :: a(:)
!$acc declare device_resident (a)
!$acc data copy (a)
!$acc end data
!$acc data deviceptr (a)
!$acc end data
!$acc parallel private (a)
!$acc end parallel
!$acc host_data use_device (a)
!$acc end host_data
!$acc parallel loop reduction(+:a) ! { dg-error "Array 'a' is not permitted in reduction" }
do i = 1,5
enddo
!$acc end parallel loop
!$acc parallel loop
do i = 1,5
enddo
!$acc end parallel loop
!$acc update device (a)
!$acc update host (a)
!$acc update self (a)
end subroutine oacc3
subroutine oacc4(a)
implicit none
integer :: i
integer, allocatable, codimension[:] :: a(:)
!$acc declare device_resident (a)
!$acc data copy (a)
!$acc end data
!$acc parallel private (a)
!$acc end parallel
!$acc parallel loop reduction(+:a) ! { dg-error "Array 'a' is not permitted in reduction" }
do i = 1,5
enddo
!$acc end parallel loop
!$acc parallel loop
do i = 1,5
enddo
!$acc end parallel loop
!$acc update device (a)
!$acc update host (a)
!$acc update self (a)
end subroutine oacc4
end module test
|