blob: e87fc58b83f4b1fd24aa195784cb53a128fbc544 [file] [log] [blame]
! { dg-do run }
!
! Tests functionality of recursive allocatable derived types.
! Here the recursive components are arrays, unlike the first three testcases.
! Notice that array components are fiendishly difficult to use :-(
!
module m
type :: recurses
type(recurses), allocatable :: c(:)
integer, allocatable :: ia
end type
end module
use m
type(recurses), allocatable, target :: a, d(:)
type(recurses), pointer :: b1
integer :: total = 0
! Check chained allocation.
allocate(a)
a%ia = 1
allocate (a%c(2))
b1 => a%c(1)
b1%ia = 2
! Check move_alloc.
allocate (d(2))
d(1)%ia = 3
d(2)%ia = 4
b1 => d(2)
allocate (b1%c(1))
b1 => b1%c(1)
b1%ia = 5
call move_alloc (d, a%c(2)%c)
if (a%ia .ne. 1) STOP 1
if (a%c(1)%ia .ne. 2) STOP 2
if (a%c(2)%c(1)%ia .ne. 3) STOP 3
if (a%c(2)%c(2)%ia .ne. 4) STOP 4
if (a%c(2)%c(2)%c(1)%ia .ne. 5) STOP 5
if (allocated (a)) deallocate (a)
if (allocated (d)) deallocate (d)
end