data-5.f90 1.3 KB

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