! { dg-do run } ! Tests the fix for PR64578. ! ! Contributed by Damian Rouson ! type foo real, allocatable :: component(:) end type type (foo), target :: f class(*), pointer :: ptr(:) allocate(f%component(1),source=[0.99]) call associate_pointer(f,ptr) select type (ptr) type is (real) if (abs (ptr(1) - 0.99) > 1e-5) STOP 1 end select ptr => return_pointer(f) ! runtime segmentation fault if (associated(return_pointer(f)) .neqv. .true.) STOP 2 select type (ptr) type is (real) if (abs (ptr(1) - 0.99) > 1e-5) STOP 3 end select contains subroutine associate_pointer(this, item) class(foo), target :: this class(*), pointer :: item(:) item => this%component end subroutine function return_pointer(this) class(foo), target :: this class(*), pointer :: return_pointer(:) return_pointer => this%component end function end