!REQUIRES: flang, amdgpu !RUN: %libomptarget-compile-fortran-run-and-check-generic subroutine f type :: t1 integer :: x, y, z end type integer, parameter :: n = 9 type(t1) :: b(n) integer :: i do i = 1, n b(i)%x = 0 b(i)%y = 0 b(i)%z = 0 enddo !$omp target data map(tofrom: b(1:3)) use_device_addr(b) !$omp target has_device_addr(b(2)%x) b(2)%x = 1 !$omp end target !$omp end target data print *, "b1", b end subroutine g type :: t1 integer :: x(3), y(7), z(5) end type integer, parameter :: n = 5 type(t1) :: b(n) integer :: i do i = 1, n b(i)%x = 0 b(i)%y = 0 b(i)%z = 0 enddo !$omp target data map(tofrom: b(1:3)) use_device_addr(b) !$omp target has_device_addr(b(2)%x) b(2)%x(3) = 1 !$omp end target !$omp end target data print *, "b2", b end call f() call g() end !CHECK: b1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 !CHECK: b2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0