! { dg-do compile } ! ! PR fortran/45836 ! The B_TYPE_INSTANCE%SIZERETURN() typebound function used to be rejected on a ! type mismatch because the function was resolved to A's SIZERETURN instead of ! B's because of the ambiguity of the SIZERETURN name in the MAIN namespace. ! ! Original testcase by someone module A implicit none type :: a_type private integer :: size = 1 contains procedure :: sizeReturn end type a_type contains function sizeReturn( a_type_ ) implicit none integer :: sizeReturn class(a_type) :: a_type_ sizeReturn = a_type_%size end function sizeReturn end module A module B implicit none type :: b_type private integer :: size = 2 contains procedure :: sizeReturn end type b_type contains function sizeReturn( b_type_ ) implicit none integer :: sizeReturn class(b_type) :: b_type_ sizeReturn = b_type_%size end function sizeReturn end module B program main call test1 call test2 contains subroutine test1 use A use B implicit none type(a_type) :: a_type_instance type(b_type) :: b_type_instance print *, a_type_instance%sizeReturn() print *, b_type_instance%sizeReturn() end subroutine test1 subroutine test2 use B use A implicit none type(a_type) :: a_type_instance type(b_type) :: b_type_instance print *, a_type_instance%sizeReturn() print *, b_type_instance%sizeReturn() end subroutine test2 end program main