! Offloading test checking interaction of an
! explicit member map from two large nested
! derived types
! REQUIRES: flang, amdgpu
! RUN: %libomptarget-compile-fortran-run-and-check-generic
program main
type :: bottom_layer1
real(4) :: i4
real(4) :: j4
real(4) :: k4
end type bottom_layer1
type :: bottom_layer2
integer(4) :: i3
integer(4) :: j3
integer(4) :: k3
end type bottom_layer2
type :: middle_layer
real(4) :: array_i2(10)
real(4) :: i2
real(4) :: array_j2(10)
type(bottom_layer1) :: nest
type(bottom_layer2) :: nest2
end type middle_layer
type :: top_layer
real(4) :: i
integer(4) :: array_i(10)
real(4) :: j
integer, allocatable :: array_j(:)
integer(4) :: k
type(middle_layer) :: nested
end type top_layer
type(top_layer) :: top_dtype
type(top_layer) :: top_dtype2
top_dtype2%nested%nest%i4 = 10
top_dtype2%nested%nest%j4 = 12
top_dtype2%nested%nest%k4 = 54
top_dtype2%nested%nest2%i3 = 20
top_dtype2%nested%nest2%j3 = 40
top_dtype2%nested%nest2%k3 = 60
top_dtype2%nested%i2 = 200
do i = 1, 10
top_dtype2%array_i(i) = i
end do
!$omp target map(from: top_dtype%nested%nest%j4, top_dtype%nested%nest%i4, top_dtype%nested%nest%k4) &
!$omp map(from: top_dtype%array_i, top_dtype%nested%nest2%i3, top_dtype%nested%i2) &
!$omp map(from: top_dtype%nested%nest2%k3, top_dtype%nested%nest2%j3) &
!$omp map(to: top_dtype2%nested%nest%j4, top_dtype2%nested%nest%i4, top_dtype2%nested%nest%k4) &
!$omp map(to: top_dtype2%array_i, top_dtype2%nested%nest2%i3, top_dtype2%nested%i2) &
!$omp map(to: top_dtype2%nested%nest2%k3, top_dtype2%nested%nest2%j3)
top_dtype%nested%nest%i4 = top_dtype2%nested%nest%i4
top_dtype%nested%nest%j4 = top_dtype2%nested%nest%j4
top_dtype%nested%nest%k4 = top_dtype2%nested%nest%k4
top_dtype%nested%nest2%i3 = top_dtype2%nested%nest2%i3
top_dtype%nested%nest2%j3 = top_dtype2%nested%nest2%j3
top_dtype%nested%nest2%k3 = top_dtype2%nested%nest2%k3
top_dtype%nested%i2 = top_dtype2%nested%i2
do i = 1, 10
top_dtype%array_i(i) = top_dtype2%array_i(i)
end do
!$omp end target
print *, top_dtype%nested%nest%i4
print *, top_dtype%nested%nest%j4
print *, top_dtype%nested%nest%k4
print *, top_dtype%nested%nest2%i3
print *, top_dtype%nested%nest2%j3
print *, top_dtype%nested%nest2%k3
print *, top_dtype%nested%i2
print *, top_dtype%array_i
end program main
!CHECK: 10.
!CHECK: 12.
!CHECK: 54.
!CHECK: 20
!CHECK: 40
!CHECK: 60
!CHECK: 200.
!CHECK: 1 2 3 4 5 6 7 8 9 10