! Offloading test checking lowering of arrays with dynamic extents. ! REQUIRES: flang, amdgpu ! RUN: %libomptarget-compile-fortran-run-and-check-generic program test_openmp_mapper implicit none integer, parameter :: n = 1024 type :: mytype integer :: data(n) end type mytype type :: mytype2 type(mytype) :: my_data end type mytype2 ! Declare custom mappers for the derived type `mytype` !$omp declare mapper(my_mapper1 : mytype :: t) map(to: t%data(1 : n)) ! Declare custom mappers for the derived type `mytype2` !$omp declare mapper(my_mapper2 : mytype2 :: t) map(mapper(my_mapper1): t%my_data) type(mytype2) :: obj integer :: i, sum_host, sum_device ! Initialize the host data do i = 1, n obj%my_data%data(i) = 1 end do ! Compute the sum on the host for verification sum_host = sum(obj%my_data%data) ! Offload computation to the device using the named mapper `my_mapper2` sum_device = 0 !$omp target map(tofrom: sum_device) map(mapper(my_mapper2) : obj) do i = 1, n sum_device = sum_device + obj%my_data%data(i) end do !$omp end target ! Check results print *, "Sum on host: ", sum_host print *, "Sum on device: ", sum_device if (sum_device == sum_host) then print *, "Test passed!" else print *, "Test failed!" end if end program test_openmp_mapper ! CHECK: Test passed!