blob: d81a31491bba3544e768210b6ccb6d9a61d912ea [file] [log] [blame]
! { dg-do run }
! PR fortran/120505
! Check that mapping nested allocatable DT components triggers required
! additional mappings for the outer array descriptor.
module m
type field_type
real(kind=8), allocatable :: density0(:,:), density1(:,:)
end type field_type
type tile_type
type(field_type) :: field
end type tile_type
type chunk_type
real(kind=8), allocatable :: left_rcv_buffer(:)
type(tile_type), allocatable :: tiles(:)
end type chunk_type
type(chunk_type) :: chunk
end
use m
allocate(chunk%tiles(1))
chunk%tiles(1)%field%density0 = reshape([1,2,3,4],[2,2])
chunk%tiles(1)%field%density1 = reshape([1,2,3,4],[2,2])
allocate(chunk%left_rcv_buffer(1))
!$omp target enter data &
!$omp map(to: chunk%tiles(1)%field%density0) &
!$omp map(to: chunk%tiles(1)%field%density1) &
!$omp map(to: chunk%left_rcv_buffer)
!$omp target
if (any (chunk%tiles(1)%field%density0 /= reshape([1,2,3,4],[2,2]))) stop 1
if (any (chunk%tiles(1)%field%density1 /= reshape([1,2,3,4],[2,2]))) stop 1
chunk%tiles(1)%field%density0 = chunk%tiles(1)%field%density0 + 7
chunk%tiles(1)%field%density1 = chunk%tiles(1)%field%density1 + 5
chunk%left_rcv_buffer(1) = 42.0_8
!$omp end target
!$omp target exit data &
!$omp map(from: chunk%tiles(1)%field%density0) &
!$omp map(from: chunk%tiles(1)%field%density1) &
!$omp map(from: chunk%left_rcv_buffer)
if (any (chunk%tiles(1)%field%density0 /= 7 + reshape([1,2,3,4],[2,2]))) stop 1
if (any (chunk%tiles(1)%field%density1 /= 5 + reshape([1,2,3,4],[2,2]))) stop 1
if (chunk%left_rcv_buffer(1) /= 42.0_8) stop 1
end