https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61527
Bug ID: 61527 Summary: class/extends, multiple generic assignment, accept invalid Product: gcc Version: 4.10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: mrestelli at gmail dot com Hi, I see that gfortran accepts the following code (even with strict debug flags) which is ambiguous in the resolution of the generic. The code is correctly rejected if disp2 uses CLASS(t2) instead of TYPE(t2), while with TYPE(T2) the code compiles and DISP2 is called, which I think should not be allowed. $ gfortran --version GNU Fortran (GCC) 4.10.0 20140613 (experimental) module m implicit none private public :: t1, t2, disp type :: t1 integer :: i = 1 end type t1 type, extends(t1) :: t2 real :: r = 2.0 end type t2 interface disp module procedure disp1, disp2 end interface contains subroutine disp1(x) class(t1), intent(in) :: x write(*,*) "Disp 1: ",x%i end subroutine disp1 subroutine disp2(x) type(t2), intent(in) :: x ! <- accepted !class(t2), intent(in) :: x ! <- rejected write(*,*) "Disp 2: ",x%r end subroutine disp2 end module m program p use m implicit none type(t1) :: a type(t2) :: b call disp(a) call disp(b) end program p