diff options
| author | Akash Banerjee <akash.banerjee@amd.com> | 2025-11-14 15:59:48 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-14 15:59:48 +0000 |
| commit | 8aa7d823b0cba96e54d4d73539df4b82c3b401b9 (patch) | |
| tree | f28cedf9a7f4f7ccef6eb09bd32c00fcb8cace13 /offload/test/offloading | |
| parent | 282bdb4146d465f9c5f2c9add3bd63583db70144 (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.f90 | 65 |
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! ======= |
