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