! Program to test DERIVED type with components point to the DERIVED
|
! Program to test DERIVED type with components point to the DERIVED
|
! type itself, and two DERIVED type with componets point to each
|
! type itself, and two DERIVED type with componets point to each
|
! other.
|
! other.
|
program nest_derived
|
program nest_derived
|
type record
|
type record
|
integer :: value
|
integer :: value
|
type(record), pointer :: rp
|
type(record), pointer :: rp
|
end type record
|
end type record
|
|
|
type record1
|
type record1
|
integer value
|
integer value
|
type(record2), pointer :: r1p
|
type(record2), pointer :: r1p
|
end type
|
end type
|
|
|
type record2
|
type record2
|
integer value
|
integer value
|
type(record1), pointer :: r2p
|
type(record1), pointer :: r2p
|
end type
|
end type
|
|
|
type(record), target :: e1, e2, e3
|
type(record), target :: e1, e2, e3
|
type(record1), target :: r1
|
type(record1), target :: r1
|
type(record2), target :: r2
|
type(record2), target :: r2
|
nullify(r1%r1p,r2%r2p,e1%rp,e2%rp,e3%rp)
|
nullify(r1%r1p,r2%r2p,e1%rp,e2%rp,e3%rp)
|
|
|
r1%r1p => r2
|
r1%r1p => r2
|
r2%r2p => r1
|
r2%r2p => r1
|
e1%rp => e2
|
e1%rp => e2
|
e2%rp => e3
|
e2%rp => e3
|
|
|
r1%value = 11
|
r1%value = 11
|
r2%value = 22
|
r2%value = 22
|
|
|
e1%value = 33
|
e1%value = 33
|
e1%rp%value = 44
|
e1%rp%value = 44
|
e1%rp%rp%value = 55
|
e1%rp%rp%value = 55
|
|
|
if (r1%r1p%value .ne. 22) call abort
|
if (r1%r1p%value .ne. 22) call abort
|
if (r2%r2p%value .ne. 11) call abort
|
if (r2%r2p%value .ne. 11) call abort
|
if (e1%value .ne. 33) call abort
|
if (e1%value .ne. 33) call abort
|
if (e2%value .ne. 44) call abort
|
if (e2%value .ne. 44) call abort
|
if (e3%value .ne. 55) call abort
|
if (e3%value .ne. 55) call abort
|
if (r1%value .ne. 11) call abort
|
if (r1%value .ne. 11) call abort
|
if (r2%value .ne. 22) call abort
|
if (r2%value .ne. 22) call abort
|
|
|
end
|
end
|
|
|