! REQUIRES: flang, amdgpu ! RUN: %libomptarget-compile-fortran-generic ! RUN: %libomptarget-run-generic 2>&1 | %fcheck-generic module enter_exit_mapper_mod implicit none type :: field_type real, allocatable :: values(:) end type field_type type :: tile_type type(field_type) :: field integer, allocatable :: neighbors(:) end type tile_type contains subroutine init_tile(tile) type(tile_type), intent(inout) :: tile integer :: j allocate(tile%field%values(4)) allocate(tile%neighbors(4)) do j = 1, 4 tile%field%values(j) = 10.0 * j tile%neighbors(j) = j end do end subroutine init_tile end module enter_exit_mapper_mod program implicit_enter_exit use enter_exit_mapper_mod implicit none integer :: j type(tile_type) :: tile call init_tile(tile) !$omp target enter data map(alloc: tile%field%values) !$omp target do j = 1, size(tile%field%values) tile%field%values(j) = 5.0 * j end do !$omp end target !$omp target exit data map(from: tile%field%values) do j = 1, size(tile%field%values) if (tile%field%values(j) /= 5.0 * j) then print *, "======= Test Failed! =======" stop 1 end if if (tile%neighbors(j) /= j) then print *, "======= Test Failed! =======" stop 1 end if end do print *, "======= Test Passed! =======" end program implicit_enter_exit ! CHECK: ======= Test Passed! =======