blob: b619774514b2c07553e18779b3795c8bc7490ea6 [file]
! REQUIRES: flang, amdgpu
! RUN: %libomptarget-compile-fortran-generic
! RUN: env LIBOMPTARGET_INFO=16 %libomptarget-run-generic 2>&1 | %fcheck-generic
module test
implicit none
TYPE field_type
REAL, DIMENSION(:,:), ALLOCATABLE :: density0, density1
END TYPE field_type
TYPE tile_type
TYPE(field_type) :: field
INTEGER :: tile_neighbours(4)
END TYPE tile_type
TYPE chunk_type
INTEGER :: filler
TYPE(tile_type), DIMENSION(:), ALLOCATABLE :: tiles
END TYPE chunk_type
end module test
program reproducer
use test
implicit none
integer :: i, j
TYPE(chunk_type) :: chunk
allocate(chunk%tiles(2))
do i = 1, 2
allocate(chunk%tiles(i)%field%density0(2, 2))
allocate(chunk%tiles(i)%field%density1(2, 2))
do j = 1, 4
chunk%tiles(i)%tile_neighbours(j) = j * 10
end do
end do
!$omp target enter data map(alloc: &
!$omp chunk%tiles(2)%field%density0)
!$omp target
chunk%tiles(2)%field%density0(1,1) = 25
chunk%tiles(2)%field%density0(1,2) = 50
chunk%tiles(2)%field%density0(2,1) = 75
chunk%tiles(2)%field%density0(2,2) = 100
!$omp end target
!$omp target exit data map(from: &
!$omp chunk%tiles(2)%field%density0)
if (chunk%tiles(2)%field%density0(1,1) /= 25) then
print*, "======= Test Failed! ======="
stop 1
end if
if (chunk%tiles(2)%field%density0(1,2) /= 50) then
print*, "======= Test Failed! ======="
stop 1
end if
if (chunk%tiles(2)%field%density0(2,1) /= 75) then
print*, "======= Test Failed! ======="
stop 1
end if
if (chunk%tiles(2)%field%density0(2,2) /= 100) then
print*, "======= Test Failed! ======="
stop 1
end if
do j = 1, 4
if (chunk%tiles(2)%tile_neighbours(j) /= j * 10) then
print*, "======= Test Failed! ======="
stop 1
end if
end do
print *, "======= Test Passed! ======="
end program reproducer
! CHECK: "PluginInterface" device {{[0-9]+}} info: Launching kernel {{.*}}
! CHECK: ======= Test Passed! =======