! { dg-do run } ! { dg-additional-options "-cpp" } function is_mapped (n) result (rc) use openacc integer, intent (in) :: n logical rc #if ACC_MEM_SHARED integer i rc = .TRUE. i = n #else rc = acc_is_present (n, sizeof (n)) #endif end function is_mapped program main integer i, j logical is_mapped i = -1 j = -2 !$acc data copyin (i, j) if (is_mapped (i) .eqv. .FALSE.) stop 1 if (is_mapped (j) .eqv. .FALSE.) stop 2 if (i .ne. -1 .or. j .ne. -2) stop 3 i = 2 j = 1 if (i .ne. 2 .or. j .ne. 1) stop 4 !$acc end data if (i .ne. 2 .or. j .ne. 1) stop 5 i = -1 j = -2 !$acc data copyout (i, j) if (is_mapped (i) .eqv. .FALSE.) stop 6 if (is_mapped (j) .eqv. .FALSE.) stop 7 if (i .ne. -1 .or. j .ne. -2) stop 8 i = 2 j = 1 if (i .ne. 2 .or. j .ne. 1) stop 9 !$acc parallel present (i, j) i = 4 j = 2 !$acc end parallel !$acc end data if (i .ne. 4 .or. j .ne. 2) stop 10 i = -1 j = -2 !$acc data create (i, j) if (is_mapped (i) .eqv. .FALSE.) stop 11 if (is_mapped (j) .eqv. .FALSE.) stop 12 if (i .ne. -1 .or. j .ne. -2) stop 13 i = 2 j = 1 if (i .ne. 2 .or. j .ne. 1) stop 14 !$acc end data if (i .ne. 2 .or. j .ne. 1) stop 15 i = -1 j = -2 !$acc data present_or_copyin (i, j) if (is_mapped (i) .eqv. .FALSE.) stop 16 if (is_mapped (j) .eqv. .FALSE.) stop 17 if (i .ne. -1 .or. j .ne. -2) stop 18 i = 2 j = 1 if (i .ne. 2 .or. j .ne. 1) stop 19 !$acc end data if (i .ne. 2 .or. j .ne. 1) stop 20 i = -1 j = -2 !$acc data present_or_copyout (i, j) if (is_mapped (i) .eqv. .FALSE.) stop 21 if (is_mapped (j) .eqv. .FALSE.) stop 22 if (i .ne. -1 .or. j .ne. -2) stop 23 i = 2 j = 1 if (i .ne. 2 .or. j .ne. 1) stop 24 !$acc parallel present (i, j) i = 4 j = 2 !$acc end parallel !$acc end data if (i .ne. 4 .or. j .ne. 2) stop 25 i = -1 j = -2 !$acc data present_or_copy (i, j) if (is_mapped (i) .eqv. .FALSE.) stop 26 if (is_mapped (j) .eqv. .FALSE.) stop 27 if (i .ne. -1 .or. j .ne. -2) stop 28 i = 2 j = 1 if (i .ne. 2 .or. j .ne. 1) stop 29 !$acc end data #if ACC_MEM_SHARED if (i .ne. 2 .or. j .ne. 1) stop 30 #else if (i .ne. -1 .or. j .ne. -2) stop 31 #endif i = -1 j = -2 !$acc data present_or_create (i, j) if (is_mapped (i) .eqv. .FALSE.) stop 32 if (is_mapped (j) .eqv. .FALSE.) stop 33 i = 2 j = 1 if (i .ne. 2 .or. j .ne. 1) stop 34 !$acc end data if (i .ne. 2 .or. j .ne. 1) stop 35 i = -1 j = -2 !$acc data copyin (i, j) !$acc data present (i, j) if (is_mapped (i) .eqv. .FALSE.) stop 36 if (is_mapped (j) .eqv. .FALSE.) stop 37 if (i .ne. -1 .or. j .ne. -2) stop 38 i = 2 j = 1 if (i .ne. 2 .or. j .ne. 1) stop 39 !$acc end data !$acc end data if (i .ne. 2 .or. j .ne. 1) stop 40 i = -1 j = -2 !$acc data copyin (i, j) !$acc data present (i, j) if (is_mapped (i) .eqv. .FALSE.) stop 41 if (is_mapped (j) .eqv. .FALSE.) stop 42 if (i .ne. -1 .or. j .ne. -2) stop 43 i = 2 j = 1 if (i .ne. 2 .or. j .ne. 1) stop 44 !$acc end data !$acc end data if (i .ne. 2 .or. j .ne. 1) stop 45 i = -1 j = -2 !$acc data #if !ACC_MEM_SHARED if (is_mapped (i) .eqv. .TRUE.) stop 46 if (is_mapped (j) .eqv. .TRUE.) stop 47 #endif if (i .ne. -1 .or. j .ne. -2) stop 48 i = 2 j = 1 if (i .ne. 2 .or. j .ne. 1) stop 49 !$acc end data if (i .ne. 2 .or. j .ne. 1) stop 50 end program main