http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45961
Summary: [4.6 Regression] [OOP] Problem with polymorphic type-bound operators Product: gcc Version: 4.6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran AssignedTo: unassig...@gcc.gnu.org ReportedBy: ja...@gcc.gnu.org MODULE DAT_MOD TYPE :: DAT CONTAINS PROCEDURE :: LESS_THAN GENERIC :: OPERATOR (.LT.) => LESS_THAN END TYPE DAT CONTAINS LOGICAL FUNCTION LESS_THAN(A, B) CLASS (DAT), INTENT (IN) :: A, B LESS_THAN = .true. END FUNCTION LESS_THAN END MODULE DAT_MOD PROGRAM TEST USE DAT_MOD IMPLICIT NONE TYPE NODE CLASS (DAT), POINTER :: PT END TYPE NODE TYPE (NODE) :: NDA, NDB PRINT *, LST(NDA,NDB) CONTAINS LOGICAL FUNCTION LST(A, B) CLASS (NODE), INTENT (IN) :: A, B LST = A%PT .LT. B%PT END FUNCTION LST END $ gfortran-4.6 test.f90 test.f90:21.15: PRINT *, LST(NDA,NDB) 1 Error: Type mismatch in argument 'a' at (1); passed TYPE(node) to CLASS(dat) This means that for some reason the formal arguments of LST come out wrongly as CLASS(dat), while they are actually CLASS(node)!?! Originally reported by Mark Rashid at http://gcc.gnu.org/ml/fortran/2010-10/msg00104.html.