The following program is valid but it fails to compile due to the way the indices in vtable are implemented.
Cf. http://gcc.gnu.org/ml/fortran/2009-09/msg00298.html ========= File: bb.f90 ========= module m type t end type t end module m ========= File: cc.f90 ========= module m2 use m type, extends(t) :: t2 end type t2 end module m2 ========= File: dd.f90 ========= use m use m2 type,extends(t) :: t3 end type t3 integer :: i class(t), allocatable :: a allocate(t3 :: a) select type(a) type is(t) i = 1 type is(t2) i = 2 type is(t3) i = 3 end select print *, i end ======================== The error message is: $ gfortran bb.f90 cc.f90 dd.f90 dd.f90:10.10: type is(t) 1 dd.f90:12.10: type is(t2) 2 Error: CASE label at (1) overlaps with CASE label at (2) -- Summary: [OOP] TYPE IS rejected because of way vtable index is implemented Product: gcc Version: 4.5.0 Status: UNCONFIRMED Keywords: rejects-valid Severity: normal Priority: P3 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: burnus at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41583