! Test 'nohost' clause via 'acc_on_device'. ! { dg-do run } ! With optimizations disabled, we currently don't expect that 'acc_on_device' "evaluates at compile time to a constant". ! { dg-skip-if "TODO PR82391" { *-*-* } { "-O0" } } ! { dg-additional-options "-fdump-tree-oaccloops" } program main use openacc implicit none integer, parameter :: n = 10 integer :: a(n), i integer, external :: fact_nohost !$acc routine (fact_nohost) integer, external :: fact !$acc parallel loop do i = 1, n if (acc_on_device(acc_device_not_host)) then a(i) = fact_nohost(i) else a(i) = 0 end if end do !$acc end parallel loop do i = 1, n if (acc_get_device_type() .eq. acc_device_host) then if (a(i) .ne. 0) stop 10 + i else if (a(i) .ne. fact(i)) stop 20 + i end if end do end program main recursive function fact(x) result(res) implicit none !$acc routine (fact) integer, intent(in) :: x integer :: res if (x < 1) then res = 1 else res = x * fact(x - 1) end if end function fact function fact_nohost(x) result(res) use openacc implicit none !$acc routine (fact_nohost) nohost integer, intent(in) :: x integer :: res integer, external :: fact res = fact(x) end function fact_nohost ! { dg-final { scan-tree-dump-times {(?n)^OpenACC routine 'fact_nohost' has 'nohost' clause\.$} 1 oaccloops { target { ! offloading_enabled } } } } ! { dg-final { scan-tree-dump-times {(?n)^OpenACC routine 'fact_nohost_' has 'nohost' clause\.$} 1 oaccloops { target offloading_enabled } } } !TODO See PR101551 for 'offloading_enabled' differences.