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

    <tr>
        <th>Summary</th>
        <td>
            [flang] Incorrect generic resolution of ASSIGNMENT(=)
        </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 base
      integer(4) :: i = -999
      contains
         procedure, pass(b) :: array_scalar
 procedure, pass    :: elemental
         generic :: assignment(=) => array_scalar,elemental
   end type

   contains

   subroutine array_scalar ( a, b )
      class(base), intent(out) :: a(:)
 class(base), intent(in)  :: b

      print *,'array_scalar'
      do i =0, size(a)-1
         a(i+1)%i = b%i + i
      end do


   end subroutine

   impure elemental subroutine elemental ( a, b )
 class(base), intent(out) :: a
      class(base), intent(in)  :: b

 print*, "elemental"
      a%i = b%i + 1

   end subroutine

end module

program genericAssignmentPass011
   use m

   class(base), allocatable :: b1, b2(:)

   allocate (b1, b2(3))

   b1 = base(100)
 print *, b1%i

   b2 = b1                     !! ERROR: should resolve to subroutine "array_scalar" rather than "elemental"
   print *, b2%i


end program
```

The defined assignment `b2 = b1` has a more specific subroutine (`array_scalar`) to resolve to rather than the elemental subroutine `elemental`. 

All ifort, gfortran and XLF outputs the same expected result.
```
 elemental
         101
 array_scalar
         101 102         103
```

But Flang has
```
 elemental
 101
 elemental
 elemental
 elemental
 102 102 102
```

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUlU1v4zYTxz8NfRnEoEYvlg46KHb8YIGn2yK7h94KShrbLGjSIKm06acvSGll2XGDNkgQk563_4_DoXBOHjVRzfJnlu9WYvAnY-ud0JLUdnsivWpN_15vjXayJwv-RHAwSpk_pD5CZ3piacN4wwo-_fLmbPpBEZzDNm8AwL9fCFrhaFwCgNSejmQZlhnDCkKMtAEJLN3BU1VVs2FntBdSu3kDAC7WdNQPlhhu4SKcY1i2izDCWvH-m-uEEjb4fbAPQSZbUnQm7YVaJjiSJiu7OV6EFMwYlizdjal2LH25TYXbu2ik-6h9BrFQM264obVm8FLTTShgWIII5bbAcEFDTWoDS6yCQSAZCzODXzKIpTaT82d-Uge3H37tXFoELbUHhg3DLcPNrdjNbNab8eR4iOvkX8SwFAyrp2QJNVQkGT4nsYB8POt2_ITPIGfbQK03Yx1XjldS87Y8XwZL1yNc0rxufkT5Xyj-G_KPCUZ4IztgiNfWQJyjigcgkk9lh73xfo3rizVHK84_WraZW_UX4RxPphMY3PI6PtAilDKd8KJVNOtIIjRcNtLoPxlTQLuwSmOsq1mbjMpiljLhfMK_7KqYJZdXHxx9Enj0wzBhmMDL6-vPr6FEdzKD6sGSM-qNwJtlBzDE24ZFsMKf4gwT-vGR3JaG19Im8hPtu3nHePP9RNDTQWrqF-MCWMFnRazgcBIOBJyNJXAX6uRBdrcll6zgN1UXgVpQthC5lBHm8cMLwAp-1VfwNYyFNkqBPBjrg8Jj-GCFBqF7-PX_ezCDvwzexahOnAnozwt1niLjQfn1nfLH4zPhse3ux_Dia0g4LtbpR6DPg4e9EvoYmH2adcp2s_fPi5B4-ruLuurrtK_SSqyoTjZZmeVY8GJ1qpO0P3R53iWCZ-lGlD1y3GRpT0VR8WLTr2SNHHOeY5lskiIr1mWebUrRZkVLlFZVwTJOZyHVWqm389rY40o6N1CdZEnJNyslWlIuPsGIhyCapc3BmjBf-tCb-W5l6-D71A5HxzKupPPuGs1Lr-ITPjrnO_iiO2MtdX5-y2L_DF4aDeYAzbdvX_739aeXr9_nJ201WFWfvL-4eN33DPdH6U9Du-7MmeE-ZJv-PV2s-Z06z3AfhTiG-0nLW41_BwAA__8r72ii">