module m integer :: a = 1 !$omp declare target enter(a) end module m module m2 contains subroutine bar() use m implicit none !$omp declare target a = a + 5 end subroutine bar end module m2 program p use m use m2 implicit none integer :: b, i !$omp target parallel do map(always, tofrom: a) firstprivate(a) do i = 1, 1 a = 7 call bar() if (a /= 7) error stop 1 a = a + 8 end do if (a /= 6) error stop 2 b = 3 !$omp target parallel do map(always, tofrom: a) firstprivate(b) do i = 1, 1 a = 3 call bar () if (a /= 8) error stop 3 a = a + b end do if (a /= 11) error stop 4 end program p