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