! { dg-do run } ! ! Tests the fix for PR78108 in which an error was ! triggered by the module procedures being added twice ! to the operator interfaces. ! ! Contributed by Damian Rouson ! module foo_interface implicit none type foo integer :: x contains procedure :: add generic :: operator(+) => add procedure :: mult generic :: operator(*) => mult end type interface integer module function add(lhs,rhs) implicit none class(foo), intent(in) :: lhs,rhs end function integer module function mult(lhs,rhs) implicit none class(foo), intent(in) :: lhs,rhs end function end interface end module submodule(foo_interface) foo_implementation contains integer module function add(lhs,rhs) implicit none class(foo), intent(in) :: lhs,rhs add = lhs % x + rhs % x end function integer module function mult(lhs,rhs) implicit none class(foo), intent(in) :: lhs,rhs mult = lhs % x * rhs % x end function end submodule use foo_interface type(foo) :: a = foo (42) type(foo) :: b = foo (99) if (a + b .ne. 141) STOP 1 if (a * b .ne. 4158) STOP 2 end