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