! { dg-do compile } module op implicit none type a integer i end type a type b real i end type b interface operator(==) module procedure f1 end interface operator(.eq.) interface operator(.eq.) module procedure f2 end interface operator(==) interface operator(/=) module procedure f1 end interface operator(.ne.) interface operator(.ne.) module procedure f2 end interface operator(/=) interface operator(<=) module procedure f1 end interface operator(.le.) interface operator(.le.) module procedure f2 end interface operator(<=) interface operator(<) module procedure f1 end interface operator(.lt.) interface operator(.lt.) module procedure f2 end interface operator(<) interface operator(>=) module procedure f1 end interface operator(.ge.) interface operator(.ge.) module procedure f2 end interface operator(>=) interface operator(>) module procedure f1 end interface operator(.gt.) interface operator(.gt.) module procedure f2 end interface operator(>) contains function f2(x,y) logical f2 type(a), intent(in) :: x, y end function f2 function f1(x,y) logical f1 type(b), intent(in) :: x, y end function f1 end module op