! { dg-do run } ! ! Contributed by Gerhard Steinmetz ! module m type t contains generic :: h => g procedure, private :: g end type contains function g(x, y) result(z) class(t), intent(in) :: x real, intent(in) :: y(:, :) real :: z(size(y, 2)) integer :: i do i = 1, size(y, 2) z(i) = i end do end end module m2 use m type t2 class(t), allocatable :: u(:) end type end use m2 type(t2) :: x real :: y(1,5) allocate (x%u(1)) if (any (int(f (x, y)) .ne. [1,2,3,4,5])) stop 1 deallocate (x%u) contains function f(x, y) result(z) use m2 type(t2) :: x real :: y(:, :) real :: z(size(y, 2)) z = x%u(1)%h(y) ! Used to segfault here end end