4 ! Also tests fixes for PR52102
6 ! Check whether DT assignment with polymorphic components works.
15 class(t
), allocatable
:: a
21 if (allocated (one
%a
)) call abort ()
26 if (one
%a
%x
/= 7890) call abort ()
30 if (allocated (one
%a
)) call abort ()
35 integer, allocatable
:: x(:)
39 class(t
), allocatable
:: a
45 if (allocated (one
%a
)) call abort ()
49 if (.not
.allocated (one
%a
)) call abort ()
50 if (allocated (one
%a
%x
)) call abort ()
55 if (any (one
%a
%x
/= 7890)) call abort ()
59 if (allocated (one
%a
)) call abort ()
69 class(t
), allocatable
:: a(:)
74 ! Test allocate with array source - PR52102
75 allocate (two
%a(2), source
= [t(4), t(6)])
77 if (allocated (one
%a
)) call abort ()
80 if (.not
.allocated (one
%a
)) call abort ()
82 if ((one
%a(1)%x
/= 4)) call abort ()
83 if ((one
%a(2)%x
/= 6)) call abort ()
88 if (allocated (one
%a
)) call abort ()
90 ! Test allocate with no source followed by assignments.
95 if (allocated (one
%a
)) call abort ()
98 if (.not
.allocated (one
%a
)) call abort ()
100 if ((one
%a(1)%x
/= 5)) call abort ()
101 if ((one
%a(2)%x
/= 7)) call abort ()
105 if (allocated (one
%a
)) call abort ()
110 integer, allocatable
:: x(:)
114 class(t
), allocatable
:: a(:)
119 if (allocated (one
%a
)) call abort ()
120 if (allocated (two
%a
)) call abort ()
124 if (allocated (two
%a(1)%x
)) call abort ()
125 if (allocated (two
%a(2)%x
)) call abort ()
126 allocate (two
%a(1)%x(3), source
=[1,2,3])
127 allocate (two
%a(2)%x(5), source
=[5,6,7,8,9])
129 if (.not
. allocated (one
%a
)) call abort ()
130 if (.not
. allocated (one
%a(1)%x
)) call abort ()
131 if (.not
. allocated (one
%a(2)%x
)) call abort ()
133 if (size(one
%a
) /= 2) call abort()
134 if (size(one
%a(1)%x
) /= 3) call abort()
135 if (size(one
%a(2)%x
) /= 5) call abort()
136 if (any (one
%a(1)%x
/= [1,2,3])) call abort ()
137 if (any (one
%a(2)%x
/= [5,6,7,8,9])) call abort ()
139 deallocate (two
%a(1)%x
)
141 if (.not
. allocated (one
%a
)) call abort ()
142 if (allocated (one
%a(1)%x
)) call abort ()
143 if (.not
. allocated (one
%a(2)%x
)) call abort ()
145 if (size(one
%a
) /= 2) call abort()
146 if (size(one
%a(2)%x
) /= 5) call abort()
147 if (any (one
%a(2)%x
/= [5,6,7,8,9])) call abort ()
151 if (allocated (one
%a
)) call abort ()
152 if (allocated (two
%a
)) call abort ()