! Offloading test checking interaction of an explicit derived type mapping when
! mapped to target and assigning to individual members
! REQUIRES: flang, amdgpu

! RUN: %libomptarget-compile-fortran-run-and-check-generic
! XFAIL: intelgpu
program main
    type :: scalar
    integer(4) :: ix = 0
    real(4) :: rx = 0.0
    complex(4) :: zx = (0,0)
    integer(4) :: array(5)
    end type scalar

    type(scalar) :: out
    type(scalar) :: in

    in%ix = 10
    in%rx = 2.0
    in%zx = (2, 10)

    do i = 1, 5
      in%array(i) = i
    end do

  !$omp target map(from:out) map(to:in)
    out%ix = in%ix
    out%rx = in%rx
    out%zx = in%zx

    do i = 1, 5
      out%array(i) = in%array(i)
    end do
  !$omp end target

    print*, in%ix
    print*, in%rx
    print*, in%array
    write (*,*) in%zx

    print*, out%ix
    print*, out%rx
    print*, out%array
    write (*,*)  out%zx
end program main

!CHECK: 10
!CHECK: 2.
!CHECK: 1 2 3 4 5
!CHECK: (2.,10.)
!CHECK: 10
!CHECK: 2.
!CHECK: 1 2 3 4 5
!CHECK: (2.,10.)
