xref: /llvm-project/offload/test/offloading/fortran/implicit-record-field-mapping.f90 (revision e532241b021cd48bad303721757c1194bc844775)
1*e532241bSKareem Ergawy! Test implicit mapping of alloctable record fields.
2*e532241bSKareem Ergawy
3*e532241bSKareem Ergawy! REQUIRES: flang, amdgpu
4*e532241bSKareem Ergawy
5*e532241bSKareem Ergawy! This fails only because it needs the Fortran runtime built for device. If this
6*e532241bSKareem Ergawy! is avaialbe, this test succeeds when run.
7*e532241bSKareem Ergawy! XFAIL: *
8*e532241bSKareem Ergawy
9*e532241bSKareem Ergawy! RUN: %libomptarget-compile-fortran-generic
10*e532241bSKareem Ergawy! RUN: env LIBOMPTARGET_INFO=16 %libomptarget-run-generic 2>&1 | %fcheck-generic
11*e532241bSKareem Ergawyprogram test_implicit_field_mapping
12*e532241bSKareem Ergawy  implicit none
13*e532241bSKareem Ergawy
14*e532241bSKareem Ergawy  type record_t
15*e532241bSKareem Ergawy    real, allocatable :: not_to_implicitly_map(:)
16*e532241bSKareem Ergawy    real, allocatable :: to_implicitly_map(:)
17*e532241bSKareem Ergawy  end type
18*e532241bSKareem Ergawy
19*e532241bSKareem Ergawy  type(record_t) :: dst_record
20*e532241bSKareem Ergawy  real :: src_array(10)
21*e532241bSKareem Ergawy  real :: dst_sum, src_sum
22*e532241bSKareem Ergawy  integer :: i
23*e532241bSKareem Ergawy
24*e532241bSKareem Ergawy  call random_number(src_array)
25*e532241bSKareem Ergawy  dst_sum = 0
26*e532241bSKareem Ergawy  src_sum = 0
27*e532241bSKareem Ergawy
28*e532241bSKareem Ergawy  do i=1,10
29*e532241bSKareem Ergawy    src_sum = src_sum + src_array(i)
30*e532241bSKareem Ergawy  end do
31*e532241bSKareem Ergawy  print *, "src_sum=", src_sum
32*e532241bSKareem Ergawy
33*e532241bSKareem Ergawy  !$omp target map(from: dst_sum)
34*e532241bSKareem Ergawy    dst_record%to_implicitly_map = src_array
35*e532241bSKareem Ergawy    dst_sum = 0
36*e532241bSKareem Ergawy
37*e532241bSKareem Ergawy    do i=1,10
38*e532241bSKareem Ergawy      dst_sum = dst_sum + dst_record%to_implicitly_map(i)
39*e532241bSKareem Ergawy    end do
40*e532241bSKareem Ergawy  !$omp end target
41*e532241bSKareem Ergawy
42*e532241bSKareem Ergawy  print *, "dst_sum=", dst_sum
43*e532241bSKareem Ergawy
44*e532241bSKareem Ergawy  if (src_sum == dst_sum) then
45*e532241bSKareem Ergawy    print *, "Test succeeded!"
46*e532241bSKareem Ergawy  else
47*e532241bSKareem Ergawy    print *, "Test failed!", " dst_sum=", dst_sum, "vs. src_sum=", src_sum
48*e532241bSKareem Ergawy  endif
49*e532241bSKareem Ergawyend program
50*e532241bSKareem Ergawy
51*e532241bSKareem Ergawy! CHECK: "PluginInterface" device {{[0-9]+}} info: Launching kernel {{.*}}
52*e532241bSKareem Ergawy! CHECK: Test succeeded!
53