summaryrefslogtreecommitdiff
path: root/offload/test/offloading
diff options
context:
space:
mode:
Diffstat (limited to 'offload/test/offloading')
-rw-r--r--offload/test/offloading/fortran/implicit-derived-enter-exit.f9065
1 files changed, 65 insertions, 0 deletions
diff --git a/offload/test/offloading/fortran/implicit-derived-enter-exit.f90 b/offload/test/offloading/fortran/implicit-derived-enter-exit.f90
new file mode 100644
index 000000000000..0c896e642987
--- /dev/null
+++ b/offload/test/offloading/fortran/implicit-derived-enter-exit.f90
@@ -0,0 +1,65 @@
+! 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! =======