This is a spin-off from PR42769 comment #17. The test case has been extracted from comment #1 in that PR. It was working before r157272 (which fixed PR43256), but fails now:
module m1 type :: t1 contains procedure :: sizeof end type contains integer function sizeof(a) class(t1) :: a end function sizeof end module module m2 use m1 type, extends(t1) :: t2 contains procedure :: sizeof => sizeof2 end type contains integer function sizeof2(a) class(t2) :: a end function end module module m3 use m2 type :: t3 class(t1), allocatable :: a contains procedure :: sizeof => sizeof3 end type contains integer function sizeof3(a) class(t3) :: a sizeof3 = a%a%sizeof() end function end module sizeof3 = a%a%sizeof() 1 Error: Type mismatch in argument 'a' at (1); passed CLASS(t1) to CLASS(t2) -- Summary: [4.5 regression] [OOP] Type mismatch in argument; passed CLASS(t1) to CLASS(t2) Product: gcc Version: 4.5.0 Status: UNCONFIRMED 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=43291