| ! { dg-do run } |
| |
| program test |
| implicit none |
| integer, allocatable :: a1(:) |
| integer, allocatable :: b1(:) |
| integer, allocatable :: c1(:) |
| integer, allocatable :: b2(:,:) |
| integer, allocatable :: c3(:,:,:) |
| |
| allocate (a1(5)) |
| if (.not.allocated (a1)) call abort() |
| |
| a1 = 10 |
| |
| !$acc parallel copy(a1(1:5)) |
| a1(1) = 1 |
| a1(2) = 2 |
| a1(3) = 3 |
| a1(4) = 4 |
| a1(5) = 5 |
| !$acc end parallel |
| |
| if (a1(1) .ne. 1) call abort |
| if (a1(2) .ne. 2) call abort |
| if (a1(3) .ne. 3) call abort |
| if (a1(4) .ne. 4) call abort |
| if (a1(5) .ne. 5) call abort |
| |
| deallocate(a1) |
| |
| allocate (a1(0:4)) |
| if (.not.allocated (a1)) call abort() |
| |
| a1 = 10 |
| |
| !$acc parallel copy(a1(0:4)) |
| a1(0) = 1 |
| a1(1) = 2 |
| a1(2) = 3 |
| a1(3) = 4 |
| a1(4) = 5 |
| !$acc end parallel |
| |
| if (a1(0) .ne. 1) call abort |
| if (a1(1) .ne. 2) call abort |
| if (a1(2) .ne. 3) call abort |
| if (a1(3) .ne. 4) call abort |
| if (a1(4) .ne. 5) call abort |
| |
| deallocate(a1) |
| |
| allocate (b2(5,5)) |
| if (.not.allocated (b2)) call abort() |
| |
| b2 = 11 |
| |
| !$acc parallel copy(b2(1:5,1:5)) |
| b2(1,1) = 1 |
| b2(2,2) = 2 |
| b2(3,3) = 3 |
| b2(4,4) = 4 |
| b2(5,5) = 5 |
| !$acc end parallel |
| |
| if (b2(1,1) .ne. 1) call abort |
| if (b2(2,2) .ne. 2) call abort |
| if (b2(3,3) .ne. 3) call abort |
| if (b2(4,4) .ne. 4) call abort |
| if (b2(5,5) .ne. 5) call abort |
| |
| deallocate(b2) |
| |
| allocate (b2(0:4,0:4)) |
| if (.not.allocated (b2)) call abort() |
| |
| b2 = 11 |
| |
| !$acc parallel copy(b2(0:4,0:4)) |
| b2(0,0) = 1 |
| b2(1,1) = 2 |
| b2(2,2) = 3 |
| b2(3,3) = 4 |
| b2(4,4) = 5 |
| !$acc end parallel |
| |
| if (b2(0,0) .ne. 1) call abort |
| if (b2(1,1) .ne. 2) call abort |
| if (b2(2,2) .ne. 3) call abort |
| if (b2(3,3) .ne. 4) call abort |
| if (b2(4,4) .ne. 5) call abort |
| |
| deallocate(b2) |
| |
| allocate (c3(5,5,5)) |
| if (.not.allocated (c3)) call abort() |
| |
| c3 = 12 |
| |
| !$acc parallel copy(c3(1:5,1:5,1:5)) |
| c3(1,1,1) = 1 |
| c3(2,2,2) = 2 |
| c3(3,3,3) = 3 |
| c3(4,4,4) = 4 |
| c3(5,5,5) = 5 |
| !$acc end parallel |
| |
| if (c3(1,1,1) .ne. 1) call abort |
| if (c3(2,2,2) .ne. 2) call abort |
| if (c3(3,3,3) .ne. 3) call abort |
| if (c3(4,4,4) .ne. 4) call abort |
| if (c3(5,5,5) .ne. 5) call abort |
| |
| deallocate(c3) |
| |
| allocate (c3(0:4,0:4,0:4)) |
| if (.not.allocated (c3)) call abort() |
| |
| c3 = 12 |
| |
| !$acc parallel copy(c3(0:4,0:4,0:4)) |
| c3(0,0,0) = 1 |
| c3(1,1,1) = 2 |
| c3(2,2,2) = 3 |
| c3(3,3,3) = 4 |
| c3(4,4,4) = 5 |
| !$acc end parallel |
| |
| if (c3(0,0,0) .ne. 1) call abort |
| if (c3(1,1,1) .ne. 2) call abort |
| if (c3(2,2,2) .ne. 3) call abort |
| if (c3(3,3,3) .ne. 4) call abort |
| if (c3(4,4,4) .ne. 5) call abort |
| |
| deallocate(c3) |
| |
| allocate (a1(5)) |
| if (.not.allocated (a1)) call abort() |
| |
| allocate (b1(5)) |
| if (.not.allocated (b1)) call abort() |
| |
| allocate (c1(5)) |
| if (.not.allocated (c1)) call abort() |
| |
| a1 = 10 |
| b1 = 3 |
| c1 = 7 |
| |
| !$acc parallel copyin(a1(1:5)) create(c1(1:5)) copyout(b1(1:5)) |
| c1(1) = a1(1) |
| c1(2) = a1(2) |
| c1(3) = a1(3) |
| c1(4) = a1(4) |
| c1(5) = a1(5) |
| |
| b1(1) = c1(1) |
| b1(2) = c1(2) |
| b1(3) = c1(3) |
| b1(4) = c1(4) |
| b1(5) = c1(5) |
| !$acc end parallel |
| |
| if (b1(1) .ne. 10) call abort |
| if (b1(2) .ne. 10) call abort |
| if (b1(3) .ne. 10) call abort |
| if (b1(4) .ne. 10) call abort |
| if (b1(5) .ne. 10) call abort |
| |
| deallocate(a1) |
| deallocate(b1) |
| deallocate(c1) |
| |
| allocate (a1(0:4)) |
| if (.not.allocated (a1)) call abort() |
| |
| allocate (b1(0:4)) |
| if (.not.allocated (b1)) call abort() |
| |
| allocate (c1(0:4)) |
| if (.not.allocated (c1)) call abort() |
| |
| a1 = 10 |
| b1 = 3 |
| c1 = 7 |
| |
| !$acc parallel copyin(a1(0:4)) create(c1(0:4)) copyout(b1(0:4)) |
| c1(0) = a1(0) |
| c1(1) = a1(1) |
| c1(2) = a1(2) |
| c1(3) = a1(3) |
| c1(4) = a1(4) |
| |
| b1(0) = c1(0) |
| b1(1) = c1(1) |
| b1(2) = c1(2) |
| b1(3) = c1(3) |
| b1(4) = c1(4) |
| !$acc end parallel |
| |
| if (b1(0) .ne. 10) call abort |
| if (b1(1) .ne. 10) call abort |
| if (b1(2) .ne. 10) call abort |
| if (b1(3) .ne. 10) call abort |
| if (b1(4) .ne. 10) call abort |
| |
| deallocate(a1) |
| deallocate(b1) |
| deallocate(c1) |
| |
| allocate (a1(5)) |
| if (.not.allocated (a1)) call abort() |
| |
| a1 = 10 |
| |
| !$acc parallel copy(a1(2:3)) |
| a1(2) = 2 |
| a1(3) = 3 |
| !$acc end parallel |
| |
| if (a1(1) .ne. 10) call abort |
| if (a1(2) .ne. 2) call abort |
| if (a1(3) .ne. 3) call abort |
| if (a1(4) .ne. 10) call abort |
| if (a1(5) .ne. 10) call abort |
| |
| deallocate(a1) |
| |
| end program test |