1! Offloading test checking interaction of an explicit member map a large nested 2! derived type 3! REQUIRES: flang, amdgpu 4 5! RUN: %libomptarget-compile-fortran-run-and-check-generic 6program main 7 type :: bottom_layer1 8 real(4) :: i4 9 real(4) :: j4 10 real(4) :: k4 11 end type bottom_layer1 12 13 type :: bottom_layer2 14 integer(4) :: i3 15 integer(4) :: j3 16 integer(4) :: k3 17 end type bottom_layer2 18 19 type :: middle_layer 20 real(4) :: array_i2(10) 21 real(4) :: i2 22 real(4) :: array_j2(10) 23 type(bottom_layer1) :: nest 24 type(bottom_layer2) :: nest2 25 end type middle_layer 26 27 type :: top_layer 28 real(4) :: i 29 integer(4) :: array_i(10) 30 real(4) :: j 31 integer, allocatable :: array_j(:) 32 integer(4) :: k 33 type(middle_layer) :: nested 34 end type top_layer 35 36 type(top_layer) :: top_dtype 37 38 top_dtype%nested%nest%j4 = 12 39!$omp target map(tofrom: top_dtype%nested%nest%j4, top_dtype%nested%nest%i4, top_dtype%nested%nest%k4) & 40!$omp map(tofrom: top_dtype%array_i, top_dtype%nested%nest2%i3, top_dtype%nested%i2, top_dtype%nested%nest2%k3, top_dtype%nested%nest2%j3) 41 top_dtype%nested%nest%i4 = 10 42 top_dtype%nested%nest%j4 = 12 + top_dtype%nested%nest%j4 43 top_dtype%nested%nest%k4 = 54 44 45 top_dtype%nested%nest2%i3 = 20 46 top_dtype%nested%nest2%j3 = 40 47 top_dtype%nested%nest2%k3 = 60 48 49 top_dtype%nested%i2 = 200 50 51 do i = 1, 10 52 top_dtype%array_i(i) = i 53 end do 54!$omp end target 55 56 print *, top_dtype%nested%nest%i4 57 print *, top_dtype%nested%nest%j4 58 print *, top_dtype%nested%nest%k4 59 60 print *, top_dtype%nested%nest2%i3 61 print *, top_dtype%nested%nest2%j3 62 print *, top_dtype%nested%nest2%k3 63 64 print *, top_dtype%nested%i2 65 66 print *, top_dtype%array_i 67end program main 68 69!CHECK: 10. 70!CHECK: 24. 71!CHECK: 54. 72!CHECK: 20 73!CHECK: 40 74!CHECK: 60 75!CHECK: 200. 76!CHECK: 1 2 3 4 5 6 7 8 9 10 77