! { dg-do run } ! ! Test contributed by Valery Weber module mod TYPE, PUBLIC :: base_type END TYPE base_type TYPE, PUBLIC :: dict_entry_type CLASS( * ), ALLOCATABLE :: key CLASS( * ), ALLOCATABLE :: val END TYPE dict_entry_type contains SUBROUTINE dict_put ( this, key, val ) CLASS(dict_entry_type), INTENT(INOUT) :: this CLASS(base_type), INTENT(IN) :: key, val INTEGER :: istat ALLOCATE( this%key, SOURCE=key, STAT=istat ) end SUBROUTINE dict_put end module mod program test use mod type(dict_entry_type) :: t type(base_type) :: a, b call dict_put(t, a, b) if (.NOT. allocated(t%key)) STOP 1 select type (x => t%key) type is (base_type) class default STOP 2 end select deallocate(t%key) end