xref: /llvm-project/offload/test/offloading/fortran/target-map-double-nested-dtype-single-member.f90 (revision 372344995568cae076477a8b0e98fcdec7c49379)
1! Offloading test checking interaction of an explicit derived type member
2! mapping of two derived types for a single array member each
3! REQUIRES: flang, amdgpu
4
5! RUN: %libomptarget-compile-fortran-run-and-check-generic
6program main
7    type :: bottom_layer
8      real(8) :: i2
9      real(4) :: array_i2(10)
10      real(4) :: array_j2(10)
11    end type bottom_layer
12
13    type :: top_layer
14      real(4) :: i
15      integer(4) :: array_i(10)
16      real(4) :: j
17      type(bottom_layer) :: nested
18      integer, allocatable :: array_j(:)
19      integer(4) :: k
20    end type top_layer
21
22    type(top_layer) :: top_dtype
23    type(top_layer) :: top_dtype2
24
25!$omp target map(tofrom: top_dtype%nested%array_i2, top_dtype2%nested%array_j2)
26    do i = 1, 10
27      top_dtype%nested%array_i2(i) = i * 2
28    end do
29
30    do i = 1, 10
31      top_dtype2%nested%array_j2(i) = i * 2
32    end do
33!$omp end target
34
35  print *, top_dtype%nested%array_i2
36  print *, top_dtype2%nested%array_j2
37end program main
38
39!CHECK: 2. 4. 6. 8. 10. 12. 14. 16. 18. 20.
40!CHECK: 2. 4. 6. 8. 10. 12. 14. 16. 18. 20.
41