1! { dg-do compile }
2!
3! PR fortran/52024
4!
5! Contributed by Fran Martinez Fadrique
6!
7module m_test
8  type t_test
9    integer :: i = 0
10  contains
11    generic :: operator(==) => t_equal_i, i_equal_t ! OK
12    procedure, private          :: t_equal_i
13    procedure, private, pass(t) :: i_equal_t
14  end type t_test
15contains
16  function t_equal_i (t, i) result(res)
17    class(t_test), intent(in) :: t
18    integer,       intent(in) :: i
19    logical :: res
20
21    print *, 't_equal_i', t%i, i
22    res = ( t%i == i )
23  end function t_equal_i
24
25  function i_equal_t (i, t) result(res)
26    integer,       intent(in) :: i
27    class(t_test), intent(in) :: t
28    logical :: res
29
30    print *, 'i_equal_t', i, t%i
31    res = ( t%i == i )
32  end function i_equal_t
33end module m_test
34
35module m_test2
36  type t2_test
37    integer :: i = 0
38  contains
39    generic :: gen => t2_equal_i, i_equal_t2 ! { dg-error "'t2_equal_i' and 'i_equal_t2' for GENERIC 'gen' at .1. are ambiguous" }
40    procedure, private          :: t2_equal_i
41    procedure, private, pass(t) :: i_equal_t2
42  end type t2_test
43contains
44  function t2_equal_i (t, i) result(res)
45    class(t2_test), intent(in) :: t
46    integer,        intent(in) :: i
47    logical :: res
48
49    print *, 't2_equal_i', t%i, i
50    res = ( t%i == i )
51  end function t2_equal_i
52
53  function i_equal_t2 (i, t) result(res)
54    integer,        intent(in) :: i
55    class(t2_test), intent(in) :: t
56    logical :: res
57
58    print *, 'i_equal_t2', i, t%i
59    res = ( t%i == i )
60  end function i_equal_t2
61end module m_test2
62