1! Offloading test checking interaction of an explicit derived type member
2! mapping of two arrays with explicit bounds when mapped to target
3! REQUIRES: flang, amdgpu
4
5! RUN: %libomptarget-compile-fortran-run-and-check-generic
6program main
7    type :: scalar_array
8    real(4) :: break_0
9    integer(4) :: array_x(3,3,3)
10    real(4) :: break_1
11    integer(4) :: array_y(3,3,3)
12    real(4) :: break_3
13    end type scalar_array
14
15    type(scalar_array) :: scalar_arr
16
17    do i = 1, 3
18      do j = 1, 3
19        do k = 1, 3
20            scalar_arr%array_x(i, j, k) = 42
21            scalar_arr%array_y(i, j, k) = 0 ! Will get overwritten by garbage values in target
22        end do
23       end do
24    end do
25
26  !$omp target map(tofrom:scalar_arr%array_x(1:3, 1:3, 2:2), scalar_arr%array_y(1:3, 1:3, 1:3))
27    do j = 1, 3
28      do k = 1, 3
29        scalar_arr%array_y(k, j, 2) = scalar_arr%array_x(k, j, 2)
30      end do
31    end do
32  !$omp end target
33
34  print *, scalar_arr%array_y
35end program main
36
37!CHECK: 0 0 0 0 0 0 0 0 0 42 42 42 42 42 42 42 42 42 0 0 0 0 0 0 0 0
38