1! { dg-do run } 2! { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } } 3 4program refcount_test 5 use openacc 6 integer, allocatable :: h(:) 7 integer i, N 8 9 N = 256 10 allocate (h(N)) 11 12 do i = 1, N 13 h(i) = i 14 end do 15 16 !$acc enter data create (h(1:N)) 17 !$acc enter data copyin (h(1:N)) 18 !$acc enter data copyin (h(1:N)) 19 !$acc enter data copyin (h(1:N)) 20 21 call acc_update_self (h) 22 do i = 1, N 23 if (h(i) .eq. i) c = c + 1 24 end do 25 ! h[] should be filled with uninitialized device values, 26 ! 'stop' if it's not. 27 if (c .eq. N) stop 1 28 29 h(:) = 0 30 31 !$acc parallel present (h(1:N)) 32 do i = 1, N 33 h(i) = 111 34 end do 35 !$acc end parallel 36 37 ! No actual copyout should happen. 38 call acc_copyout (h) 39 do i = 1, N 40 if (h(i) .ne. 0) stop 2 41 end do 42 43 !$acc exit data delete (h(1:N)) 44 45 ! This should not actually be deleted yet. 46 if (acc_is_present (h) .eqv. .FALSE.) stop 3 47 48 !$acc exit data copyout (h(1:N)) finalize 49 50 do i = 1, N 51 if (h(i) .ne. 111) stop 4 52 end do 53 54 if (acc_is_present (h) .eqv. .TRUE.) stop 5 55 56end program refcount_test 57