1! { dg-do run } 2 3program main 4 implicit none 5 include "openacc_lib.h" 6 7 integer, target :: a_3d_i(10, 10, 10) 8 complex a_3d_c(10, 10, 10) 9 real a_3d_r(10, 10, 10) 10 11 integer i, j, k 12 complex c 13 real r 14 integer, parameter :: i_size = sizeof (i) 15 integer, parameter :: c_size = sizeof (c) 16 integer, parameter :: r_size = sizeof (r) 17 18 call acc_init (acc_device_default) 19 20 call set3d (.FALSE., a_3d_i, a_3d_c, a_3d_r) 21 22 call acc_copyin (a_3d_i) 23 call acc_copyin (a_3d_c) 24 call acc_copyin (a_3d_r) 25 26 if (acc_is_present (a_3d_i) .neqv. .TRUE.) STOP 1 27 if (acc_is_present (a_3d_c) .neqv. .TRUE.) STOP 2 28 if (acc_is_present (a_3d_r) .neqv. .TRUE.) STOP 3 29 30 do i = 1, 10 31 do j = 1, 10 32 do k = 1, 10 33 if (acc_is_present (a_3d_i(i, j, k), i_size) .neqv. .TRUE.) STOP 4 34 if (acc_is_present (a_3d_c(i, j, k), i_size) .neqv. .TRUE.) STOP 5 35 if (acc_is_present (a_3d_r(i, j, k), i_size) .neqv. .TRUE.) STOP 6 36 end do 37 end do 38 end do 39 40contains 41 42 subroutine set3d (clear, a_i, a_c, a_r) 43 logical clear 44 integer, dimension (:,:,:), intent (inout) :: a_i 45 complex, dimension (:,:,:), intent (inout) :: a_c 46 real, dimension (:,:,:), intent (inout) :: a_r 47 48 integer i, j, k 49 integer lb1, ub1, lb2, ub2, lb3, ub3 50 51 lb1 = lbound (a_i, 1) 52 ub1 = ubound (a_i, 1) 53 54 lb2 = lbound (a_i, 2) 55 ub2 = ubound (a_i, 2) 56 57 lb3 = lbound (a_i, 3) 58 ub3 = ubound (a_i, 3) 59 60 do i = lb1, ub1 61 do j = lb2, ub2 62 do k = lb3, ub3 63 if (clear) then 64 a_i(i, j, k) = 0 65 a_c(i, j, k) = cmplx (0.0, 0.0) 66 a_r(i, j, k) = 0.0 67 else 68 a_i(i, j, k) = i 69 a_c(i, j, k) = cmplx (i, j) 70 a_r(i, j, k) = i 71 end if 72 end do 73 end do 74 end do 75 76 end subroutine 77 78end program 79