! { dg-additional-options "-fdump-tree-original" } ! PR fortran/98476 program abc implicit none integer a, b a = 83 b = 73 call test(a, b) contains subroutine test(aa, bb) use iso_c_binding, only: c_ptr, c_loc, c_f_pointer integer :: aa, bb integer, target :: cc, dd type(c_ptr) :: pcc, pdd cc = 131 dd = 484 !$omp target enter data map(to: aa, bb, cc, dd) !$omp target data use_device_ptr(aa, cc) use_device_addr(bb, dd) pcc = c_loc(cc) pdd = c_loc(dd) ! TODO: has_device_addr(cc, dd) !$omp target is_device_ptr(aa, bb) if (aa /= 83 .or. bb /= 73) stop 1 aa = 42 bb = 43 block integer, pointer :: c2, d2 call c_f_pointer(pcc, c2) call c_f_pointer(pdd, d2) if (c2 /= 131 .or. d2 /= 484) stop 2 c2 = 44 d2 = 45 end block !$omp end target !$omp end target data !$omp target exit data map(from:aa, bb, cc, dd) if (aa /= 42 .or. bb /= 43) stop 3 if (cc /= 44 .or. dd /= 45) stop 5 endsubroutine end program ! { dg-final { scan-tree-dump-times "omp target data .*use_device_addr\\(aa\\)" 1 "original" } } ! { dg-final { scan-tree-dump-times "omp target data .*use_device_addr\\(bb\\)" 1 "original" } } ! { dg-final { scan-tree-dump-times "omp target data .*use_device_addr\\(cc\\)" 1 "original" } } ! { dg-final { scan-tree-dump-times "omp target data .*use_device_addr\\(dd\\)" 1 "original" } }