no_create-3.F90 1.1 KB

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