The code below compiles in ifort. Accoring to at least one interpretation on the Stackoverflow question it is invalid, but ifort does not produce F2008/F2003 compliance warnings. Is intel's opion that this is correct, that it is an extension, or is it a bug? (if it is deliberate it is useful, but would also be nice to be able to get a warning as it doesn't work in gfortran, and know what the exact rule being applied is).
module classes Type AData end Type Type A contains procedure :: Work end type Type, extends(AData) :: BData end Type Type, extends(A) :: B contains procedure :: Work => Work2 end type contains subroutine Work(this, D) class(A) :: this class(*) :: D end subroutine subroutine Work2(this, D) class(B) :: this class(BData) :: D end subroutine end module classes