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