! This test validates that declare mapper for a derived type with an ! allocatable component preserves TO/FROM semantics for the component, ! ensuring the payload is copied back to the host on target exit. ! REQUIRES: flang, amdgpu ! RUN: %libomptarget-compile-fortran-run-and-check-generic program target_declare_mapper_allocatable implicit none type :: real_t real, allocatable :: real_arr(:) end type real_t ! Map the allocatable array payload via a named mapper. !$omp declare mapper (xyz : real_t :: t) map(tofrom: t%real_arr) type(real_t) :: r integer :: i logical :: ok allocate(r%real_arr(10)) r%real_arr = 1.0 !$omp target map(mapper(xyz), tofrom: r) do i = 1, size(r%real_arr) r%real_arr(i) = 3.0 end do !$omp end target ok = .true. do i = 1, size(r%real_arr) if (r%real_arr(i) /= 3.0) ok = .false. end do if (ok) then print *, "Test passed!" else print *, "Test failed!" do i = 1, size(r%real_arr) print *, r%real_arr(i) end do end if deallocate(r%real_arr) end program target_declare_mapper_allocatable ! CHECK: Test passed!