Based on a report by Rafik Zurob. Compile the following module - and then the following: use m type(t) :: x call x%gen(5) end Does the call invoke sub1 or sub2? Obviously, gfortran should ignore the PASSed argument for the generic resolution of type-bound procedures, when checking for ambiguity. The following code is invalid but accepted: module m type t contains procedure, pass(this) :: sub1 procedure, pass(this) :: sub2 generic :: gen => sub1, sub2 end type t contains subroutine sub1(x, this) integer :: i class(t) :: this end subroutine sub1 subroutine sub2 (this, y) integer :: i class(t) :: this end subroutine sub2 end module m
See Fortran 2003, 16.2.3 for details. (For type-bound operators, the PASS argument itself also plays a role in distinguishing the calls - thus, it cannot completely be ignored. For type-bound generic names, I think the PASS argument should be always be indistinguishable.)
Extended examples: http://gcc.gnu.org/ml/fortran/2012-05/msg00060.html
Taking this one. Patch: http://gcc.gnu.org/ml/fortran/2012-06/msg00111.html
Author: janus Date: Fri Jun 22 21:05:51 2012 New Revision: 188902 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=188902 Log: 2012-06-22 Janus Weil <janus@gcc.gnu.org> PR fortran/47710 PR fortran/53328 * interface.c (count_types_test, generic_correspondence, gfc_compare_interfaces): Ignore PASS arguments. (check_interface1, compare_parameter): Pass NULL arguments to gfc_compare_interfaces. * gfortran.h (gfc_compare_interfaces): Modified prototype. * expr.c (gfc_check_pointer_assign): Pass NULL arguments to gfc_compare_interfaces. * resolve.c (resolve_structure_cons): Ditto. (check_generic_tbp_ambiguity): Determine PASS arguments and pass them to gfc_compare_interfaces. 2012-06-22 Janus Weil <janus@gcc.gnu.org> PR fortran/47710 PR fortran/53328 * gfortran.dg/typebound_generic_12.f03: New. * gfortran.dg/typebound_generic_13.f03: New. Added: trunk/gcc/testsuite/gfortran.dg/typebound_generic_12.f03 trunk/gcc/testsuite/gfortran.dg/typebound_generic_13.f03 Modified: trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/expr.c trunk/gcc/fortran/gfortran.h trunk/gcc/fortran/interface.c trunk/gcc/fortran/resolve.c trunk/gcc/testsuite/ChangeLog
Fixed with r188902. Closing.