! { dg-do run } program main use iso_c_binding, only: c_sizeof use openacc, only: acc_is_present implicit none integer i integer, parameter :: n = 100 real*4 b(n), c(n) real :: d(n), e(n) common /BLOCK/ d, e !$acc enter data create(b) create(d) if (.not. acc_is_present(b, c_sizeof(b))) stop 1 if (.not. acc_is_present(d, c_sizeof(d))) stop 2 #if !ACC_MEM_SHARED if (acc_is_present(c, 1) .or. acc_is_present(c, c_sizeof(c))) stop 3 if (acc_is_present(e, 1) .or. acc_is_present(e, c_sizeof(d))) stop 4 #endif !$acc parallel loop no_create(b) no_create(c) no_create(/BLOCK/) do i = 1, n b(i) = i d(i) = -i end do !$acc end parallel loop if (.not. acc_is_present(b, c_sizeof(b))) stop 5 if (.not. acc_is_present(d, c_sizeof(d))) stop 6 #if !ACC_MEM_SHARED if (acc_is_present(c, 1) .or. acc_is_present(c, c_sizeof(c))) stop 7 if (acc_is_present(e, 1) .or. acc_is_present(e, c_sizeof(e))) stop 8 #endif !$acc exit data copyout(b) copyout(d) if (any(abs(b - [(real(i), i = 1, n)]) > 10*epsilon(b))) stop 9 if (any(abs(d - [(real(-i), i = 1, n)]) > 10*epsilon(d))) stop 10 end program main