1! Offloading test checking interaction of an explicit member map from two large 2! nested derived types 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 type(top_layer) :: top_dtype2 38 39 top_dtype2%nested%nest%i4 = 10 40 top_dtype2%nested%nest%j4 = 12 41 top_dtype2%nested%nest%k4 = 54 42 43 top_dtype2%nested%nest2%i3 = 20 44 top_dtype2%nested%nest2%j3 = 40 45 top_dtype2%nested%nest2%k3 = 60 46 47 top_dtype2%nested%i2 = 200 48 49 do i = 1, 10 50 top_dtype2%array_i(i) = i 51 end do 52 53!$omp target map(from: top_dtype%nested%nest%j4, top_dtype%nested%nest%i4, top_dtype%nested%nest%k4) & 54!$omp map(from: top_dtype%array_i, top_dtype%nested%nest2%i3, top_dtype%nested%i2) & 55!$omp map(from: top_dtype%nested%nest2%k3, top_dtype%nested%nest2%j3) & 56!$omp map(to: top_dtype2%nested%nest%j4, top_dtype2%nested%nest%i4, top_dtype2%nested%nest%k4) & 57!$omp map(to: top_dtype2%array_i, top_dtype2%nested%nest2%i3, top_dtype2%nested%i2) & 58!$omp map(to: top_dtype2%nested%nest2%k3, top_dtype2%nested%nest2%j3) 59 top_dtype%nested%nest%i4 = top_dtype2%nested%nest%i4 60 top_dtype%nested%nest%j4 = top_dtype2%nested%nest%j4 61 top_dtype%nested%nest%k4 = top_dtype2%nested%nest%k4 62 63 top_dtype%nested%nest2%i3 = top_dtype2%nested%nest2%i3 64 top_dtype%nested%nest2%j3 = top_dtype2%nested%nest2%j3 65 top_dtype%nested%nest2%k3 = top_dtype2%nested%nest2%k3 66 67 top_dtype%nested%i2 = top_dtype2%nested%i2 68 69 do i = 1, 10 70 top_dtype%array_i(i) = top_dtype2%array_i(i) 71 end do 72!$omp end target 73 74 print *, top_dtype%nested%nest%i4 75 print *, top_dtype%nested%nest%j4 76 print *, top_dtype%nested%nest%k4 77 78 print *, top_dtype%nested%nest2%i3 79 print *, top_dtype%nested%nest2%j3 80 print *, top_dtype%nested%nest2%k3 81 82 print *, top_dtype%nested%i2 83 84 print *, top_dtype%array_i 85end program main 86 87!CHECK: 10. 88!CHECK: 12. 89!CHECK: 54. 90!CHECK: 20 91!CHECK: 40 92!CHECK: 60 93!CHECK: 200. 94!CHECK: 1 2 3 4 5 6 7 8 9 10 95