1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
! { dg-do run }
!
! PR fortran/51970
! PR fortran/51977
!
type t
end type t
type, extends(t) :: t2
integer :: a
end type t2
class(t), allocatable :: y(:), z(:)
allocate(y(2), source=[t2(2), t2(3)])
call func2(y,z)
select type(z)
type is(t2)
if (any (z(:)%a /= [2, 3])) call abort()
class default
call abort()
end select
contains
function func(x)
class (t), allocatable :: x(:), func(:)
call move_alloc (x, func)
end function
function func1(x)
class (t), allocatable :: x(:), func1(:)
call move_alloc (func1, x)
end function
subroutine func2(x, y)
class (t), allocatable :: x(:), y(:)
call move_alloc (x, y)
end subroutine
end
|