The following (valid) test case is currently rejected:
implicit none type :: t1 integer :: i end type type, extends(t1) :: t2 end type type(t1),target :: x1 type(t2),target :: x2 select type ( y => fun(1) ) type is (t1) print *,"t1" type is (t2) print *,"t2" class default print *,"default" end select select type ( y => fun(-1) ) type is (t1) print *,"t1" type is (t2) print *,"t2" class default print *,"default" end select contains function fun(i) class(t1),pointer :: fun integer :: i if (i>0) then fun => x1 else if (i<0) then fun => x2 else fun => NULL() end if end function end ... with the bogus message: select type ( y => fun(1) ) 1 Error: Selector shall be polymorphic in SELECT TYPE statement at (1) -- Summary: [OOP] SELECT TYPE with class-valued function Product: gcc Version: 4.6.0 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: janus at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44044