summaryrefslogtreecommitdiff
path: root/offload/test/offloading
diff options
context:
space:
mode:
authorAkash Banerjee <akash.banerjee@amd.com>2025-11-14 15:59:48 +0000
committerGitHub <noreply@github.com>2025-11-14 15:59:48 +0000
commit8aa7d823b0cba96e54d4d73539df4b82c3b401b9 (patch)
treef28cedf9a7f4f7ccef6eb09bd32c00fcb8cace13 /offload/test/offloading
parent282bdb4146d465f9c5f2c9add3bd63583db70144 (diff)
[OpenMP][Flang] Emit default declare mappers implicitly for derived types (#140562)
This patch adds support to emit default declare mappers for implicit mapping of derived types when not supplied by user. This especially helps tackle mapping of allocatables of derived types.
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! =======