<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/148678>148678</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [flang] Incorrect diagnostic on defined operator
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            flang:frontend
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          DanielCChen
      </td>
    </tr>
</table>

<pre>
    Consider the following code:
```
module m
  type dt
    integer i
  contains
 procedure, pass(x) :: add => addmp
    generic, private :: OPERATOR(+) => add
  end type

  interface OPERATOR(+)
    module procedure addmp
  end interface
contains
  type(dt) function addmp(y,x)
    class(dt), intent(in) :: x
    integer, intent(in) :: y
    addmp%i = x%i + y + 1
 end function

end module
```

Flang complains:
```
error: Semantic errors in genop03.f
./genop03.f:8:25: error: Generic 'OPERATOR(+)' may not have specific procedures 'addmp' and 'dt%add' as their interfaces are not distinguishable
      generic, private :: OPERATOR(+) => add
 ^^^^^^^^^^^
./genop03.f:15:21: Declaration of 'addmp'
 type(dt) function addmp(y,x)
                      ^^^^^
./genop03.f:7:27: Declaration of 'add'
      procedure, pass(x) :: add => addmp
 ^^^
./genop03.f:15:21: Procedure 'add' of type 'dt' is bound to 'addmp'
    type(dt) function addmp(y,x)
 ^^^^^
```

All ifort, gfortran and XLF compiles the code successfully. 
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJykVU-P27YT_TT0ZRCDoqxIPuigtdc__IACCdIeeqXIkcyCIgWS2q6_fTG01t6uEaRpBcEmCc6bN2_-SMZoRofYsuqJVceNXNLZh_YonUF7OJzRbXqvL-3Bu2g0BkhnhMFb6_80bgTlNbKyY7xjn_n68m7yerEIE-MdQLrMCDrlNYBxCUcMYPJeeZekcZE2c_AK9RKQiQPMMkYmmlcm9kD4ZQdSa2DlkZXPtJzmFXBEh8GobBTMi0z4ZvDl6_O37rcv35homHi6Ir2ZZ2N0OrMj9rQnbmGQCh9NV2drYDeq75gQ2A2A8e59aFcvotGJWAyLU8l4txqL5sLE4fXuRNlr8Pk2xUWwLjHRGPdOj9e_K_r9i5f14uquMqQDvF5X4gku-begWxTEG72rKnRyjfpDjhnvTlbmEphmmyN9qAMMwQei8CtO0iWjIJ9EMI7y5mdebgfGuy0Tp_u-7BpWdqIiwxvC_65pBibqx-SIGiZ5AecTnOULQpxRmcGoe6IiGa4C1CCdpj0JXFEx0FGkyjbhnsMIMmDG1CYm48bFxLPssxAA_630WPX8g_dRlIIEEQXBH1FZGWQuIj-8D43Af6rYHp8fM6mJSP1dIiuN_Pybpv6HIny9NeHNLXHI42ZNbg0mQu8X6nP_USb4mbZ8FOVDL3TWghl8SBToSIsgXS6033855R4xFnON5ZkJcVEKYxwWay9b2Oi21PtyLzfYFnUlqqLkRbk5t3zXFPuyr8uq6gddS7nboy511RRFWQ-N2phWcFHxutgVdcGLclvVfKf0jjeNqJH3FdtxnKSxW2tfpq0P48bEuGBb7JrPdbOxskcb8_QXYqCGZmU3BE-TRDMh6JsQWrL91C9jZDtuTUzxjpZMsvnrcTWujvB_p3wIqKhx5Oh8pMb3DjQOxqEGP2OQyYfNEmx7TmnOk0OcKNUmnZd-q_zExIlcrH-f5uD_QJWYOGX2kYnTGsBLK_4KAAD__ycq_Fw">