1! { dg-do run } 2 3program main 4 use iso_c_binding, only: c_sizeof 5 use openacc, only: acc_is_present 6 implicit none 7 integer i 8 integer, parameter :: n = 100 9 real*4 b(n), c(n) 10 real :: d(n), e(n) 11 common /BLOCK/ d, e 12 13 !$acc enter data create(b) create(d) 14 15 if (.not. acc_is_present(b, c_sizeof(b))) stop 1 16 if (.not. acc_is_present(d, c_sizeof(d))) stop 2 17#if !ACC_MEM_SHARED 18 if (acc_is_present(c, 1) .or. acc_is_present(c, c_sizeof(c))) stop 3 19 if (acc_is_present(e, 1) .or. acc_is_present(e, c_sizeof(d))) stop 4 20#endif 21 22 !$acc parallel loop no_create(b) no_create(c) no_create(/BLOCK/) 23 do i = 1, n 24 b(i) = i 25 d(i) = -i 26 end do 27 !$acc end parallel loop 28 29 if (.not. acc_is_present(b, c_sizeof(b))) stop 5 30 if (.not. acc_is_present(d, c_sizeof(d))) stop 6 31#if !ACC_MEM_SHARED 32 if (acc_is_present(c, 1) .or. acc_is_present(c, c_sizeof(c))) stop 7 33 if (acc_is_present(e, 1) .or. acc_is_present(e, c_sizeof(e))) stop 8 34#endif 35 36 !$acc exit data copyout(b) copyout(d) 37 if (any(abs(b - [(real(i), i = 1, n)]) > 10*epsilon(b))) stop 9 38 if (any(abs(d - [(real(-i), i = 1, n)]) > 10*epsilon(d))) stop 10 39end program main 40