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

    <tr>
        <th>Summary</th>
        <td>
            [Flang] Incorrect diagnostic on renaming generic 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 opmod

  type modreal
    real :: x

 contains
      procedure :: plus
      procedure :: plus2
      generic, private :: operator(.add.) => plus

  end type

  interface operator(.adda.)
    module procedure plus2
  end interface

  contains
 function plus(a,b)
      type(modreal) :: plus
      class(modreal), intent(in) :: a,b
      plus%x = a%x+b%x*2.0
    end function plus

 function plus2(a,b)
      type(modreal) :: plus2
      class(modreal), intent(in) :: a,b
      plus2%x = a%x+b%x
    end function plus2


end module


program main
use opmod , operator(.add.) => operator(.adda.)
end program
```

Flang currently issues an error as:
```
t.f:35:22: error: Generic 'OPERATOR(.add.)' may not have specific procedures 'plus2' and 'modreal%plus' as their interfaces are not distinguishable
  use opmod , operator(.add.) => operator(.adda.)
 ^^^^^
./a6.f:35:5: 'plus2' is USE-associated from module 'opmod'
  use opmod , operator(.add.) => operator(.adda.)
 ^^^^^
./a6.f:35:5: 'plus' is USE-associated from module 'opmod'
  use opmod , operator(.add.) => operator(.adda.)
      ^^^^^
```

Module procedure `plus` is not part of the accessible generic `operator(.add.)` in the scope of main. The error message seems wrong.
All ifort, gfortran and XLF all compile the code successfully.

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEVV-PozYQ_zTOy2iRY0IIDzxw2U1VqdVV16vU14kZiCtjI9vsbb59ZUOSzW63VdVKFxFh7Jnf_GY8f9B71RuimhWfWPG4wimcrKsf0SjS-_2JzOpo23O9t8arlhyEE0FntbbflOlB2pZY3jDesC1fHt4Mtp00gR0H28Yj3gCE80gw2NYR6rQBEJcQtfMGXhY5aU1AZfwiAjA6K6mdHF0kRz39w6m4HvdkyCnJxB5Gp54xXOXsSA6DdUzsMmzbjIkKWP7I8qeLgQRCpk3ML9_KBHIdSnoLgBFhsbu4f-N2IxXxrhgX0Nc-d5ORQVkzsxA7ZGJ_vEHPcWRid4lkov0-LlKj93diMQbRsglM7JR5pTibuEY02S1eYjTiUfHCxKfj_G5ExhfB6Mg919mZuz3xrx0Q_5MH4gMXPiAvZvaMN_Fovr_r1uhs73CAAZVhvJn8ktkQCf1NHn2QIdHCAvmmbBhvDhpjVU3OkQn6DMr7iTygAXLOOkD_vtpC1rG8yQuWN0LEcCTRuPhhTn9govz8y9OX5uvnL694MlHCgGcwNsAJnwn8SFJ1St4y10fVJZ4loIk-l9cbKeZcKQF9bAvK3VLbAzpKyK3yQZl-Uv6ExxRVgP8aQmDF093Dm4yJA25vkYj_O_LKw2-_Pj2g91YqDNRC5-xwqVUmyrlbifJ7MPwOBNPvPcs3-fjz21bGtjwR3vJIOF7wiC6A7dJgQCnJe3XUdGm9UeEv2CV9k3S8tCNFgFhfGXw90ZLrA3mPPYEnGjx8c9b0GeNNozWozroQHe_jwqFJufn7TwdArUHaYVSaEnocUOCnxKubtD5HiFVb522VV7iiel3m27LKizVfneqy3KypFSXvKizaTVVVmzWndkO0rUiIaqVqwUXB1-t8vct3Oc86vt52tOPHbSGrAlu24TSg0pnWz0NmXb9KJVyvhSi3m5XGI2mfhq0QXSx2ljeds7GttUyIOIJdHXUfjlPv2YZr5YO_oQUVdBrWqVOw4hF-NNI6RzKWGvbG-qAkWAOODA5xRl9u4nINq8np-hTCmHqJODBx6FU4TcdM2oGJQ7S1vB5GZ_8gGZg4zJ2IicPiyXMt_gwAAP__Td59QQ">