! { dg-do run } ! PR fortran/99585 module m2 type t class(*), pointer :: bar(:) end type type t2 class(t), allocatable :: my(:) end type t2 contains function f (x, y) result(z) class(t) :: x(:) class(t) :: y(size(x(1)%bar)) type(t) :: z(size(x(1)%bar)) end function g (x) result(z) class(t) :: x(:) type(t) :: z(size(x(1)%bar)) end subroutine s () class(t2), allocatable :: a(:), b(:), c(:), d(:) class(t2), pointer :: p(:) c(1)%my = f (a(1)%my, b(1)%my) d(1)%my = g (p(1)%my) end end ! Contributed by G. Steinmetz: ! PR fortran/104430 module m type t integer :: a end type contains function f(x) result(z) class(t) :: x(:) type(t) :: z(size(x%a)) z%a = 42 end end program p use m class(t), allocatable :: y(:), z(:) allocate (y(32)) z = f(y) if (size(z) /= 32) stop 1 if (any (z%a /= 42)) stop 2 end