<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/142151>142151</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[flang] Incorrect resolution of defined 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 com2
integer i
contains
procedure :: c2a
generic :: assignment(=) => c2a
end type
type, extends(com2) :: c_com2
integer :: j
contains
procedure :: c2a => cc2a
end type
contains
impure elemental subroutine c2a ( a, b )
class(com2) , intent(out) :: a
class(com2) , intent(in) :: b
print*, "in c2a"
a%i = b%i + 1
end subroutine
impure elemental subroutine cc2a ( a, b )
class(c_com2) , intent(out) :: a
class(com2) , intent(in) :: b
print*, "in cc2a"
a%i = b%i + 1
select type ( b )
type is ( c_com2 )
a%j = b%j + 1
end select
end subroutine
end module
program genericAssignmentDtIntrinAssgn037
use m
type container
type(c_com2) :: cc21
end type
type(container) :: c1
c1 = container(c_com2(14,15))
print *, c1%cc21%i, c1%cc21%j
end program
```
Expected behavior:
```
> a.out
in cc2a
15 16
```
Flang outputs:
```
> a.out
in c2a
15 15
```
The component `cc21` of type `container is of type `c_com2`, so the component assignment should invoke the defined assignment of type `c_com2` rather than it's base type `com2`.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEVcGO4ygQ_Rp8KU2EcbCTgw-eZCLNfe8jbCo2WQIR4N6Zv1-BHdsz6d3pPa3UUtpQ9eq9B1UI71VvEGvCPxN-zsQYBuvqszAK9ek0oMlaK3_UJ2u8kuggDAhXq7X9S5keOiuRFA2hDSnp_Eebu5WjRrgT2gBA-PFA6OydTZ8AoEzAHh2ouNJZE4QyftkFgIezHcrRIUTwooGOie1-jwad6p67k4g7mkDYgRRnwo4Qf4ovayIamZhEqgstwk6A3wMa6Qk7JI4pdar57V3S8-7tv3Bf2PwznQ1UXFD3R4RAjVGW0ODH1tkxKIMTIDuAiPRbIOy4rd9p4X9Sw06JezLHjmGjUHw4T5m49MxrF9ZPySpGNTGFMKZMsp2xbYwgjKvoA7TTf-wz5Fuc6Mgqcrvzr1580Ixv_68dqx-_9QEAPGrswtQ4UduLrGdXKZ_2J3XvBM2-35Z6t6XeEpB8TwV_dxpxbWrt6fvhbO_E_dmNzdKF5_DVBKdM431vaFEl1NFPE-GnoZDuPLql7NSU2-Oae6hj-UvjLNELzCZh9bTLk_xN1IJ_yPeEnXIenXual04P5uPrcsJ4Ks64-nXhttoyW_HLHCS0-fL9gV1ACS0O4k1Z9zot42AQu3gVY9-bZUjkHPLyFfGihenBjuExBv8BtBWMv4L9MaTR_LAGo-iSJmklBXudr19JF-PidduuTyaWNPribXoZVqx1JoMf7KglKPNm_8QUJvGqDMpt0HvA4EQY0psjDKhAWOWhFR431FLcLpN1IY_FUWRY59X-UOYF3VfZUItStoU4HOlRCHmtpNgfqqrNO844dkV-zFTNKOOUFzQvON1Xu-uRclpxVl2l7MqyJHuKd6H0Tuu3-866PlPej1jne5bzPNOiRe3T68nYNR4NKZqrs3FSyNjy_Jy5OuZ-asfekz3Vyge_ogUVdHp9p2R-hq-ms87FAeDQWz0GZU2059W0bHS6HkJ4pHvALoRdehWGsd119k7YJRaZfz49nL3FHmeXxN8TdpklvNXs7wAAAP__2oVKJw">