<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">