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

    <tr>
        <th>Summary</th>
        <td>
            [flang] Incorrect intrinsic assignment of derived type parent component
        </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 reducer.
```
  type t
    integer :: a
  end type
  type, extends(t) :: t2
    integer :: b
  end type

  type(t), allocatable :: a(:)
  class(t), allocatable :: b(:)
  allocate(b(5), source=(/t2(1,1),t2(2,2),t2(3,3),t2(4,4),t2(5,5)/))
  a = b !! a should get b%a
  print*, a%a
  if (any(a%a /= (/1,2,3,4,5/))) stop 2
end
```

Flang failed to assign `b%a` to `a%a` in intrinsic assignment `a = b`. 

gfortran and XLF works fine.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx8U8GOnDAM_RpzsXYEDjBw4DBlhFSpH9BrIIZJm0lGSdjt_n0VmN2drlaVUIgdv-fnxJYh6MUyd1B9g-qcyTVenO_O0mo2fX9hm41OvXa9s0Er9hgvjLMzxr1ou6BntU7sD5CfoM7vX35CjK83xrhtEbWNvLBHECcQJ5Sbm63aot7DgXrkP5GtCkBNBGrfAJG-Jho_Ez1wbQSJUhrjJhnlaPhDADVpS-0GmIwM4f-I8V_EPSKlSSfVHRjc6icGcU7RNEQCagqgvtjPN5uAenqwBVAvHuwSqC8f7Aqo3_mHbb0LQBBnHBGoACpQYri41ShcOCat1X7FN69tBDptRb179YxAjbSvaU1eTNzijLvqYheYRCUhKflbZmoxRHfD9Bxs1adHh_w0GGkXnKU2rDA63LsLoc53UXWevFDn8s3UNj2q1zbo6R5-ZRu3mL1GqPMD7vTL7Hz00qK0Cn_-GPDF-d8BZ235kKlOqFa0MuOuOFZlS1V1LLJL19btXB-5qI_lXB-bUrWTqNXcFnnZCElNpjvKqcqboiiqoqX2UPEkpGx4lmOrqC6gzPkqtTkY83w9OL9kOoSVu6ISuaDMyJFN2AaIaE43AOI0e2dTKwNRGivfJezTuC4BytzoEMMHW9TRbAO4g6szfreT856n-PXluBkVe_3Me-PjTfrkntz15izbmK3edJcYb2Hr2QFoWHS8rONhclegIWW-_55u3v3iKQINW1EhdcBe13NHfwMAAP__-HQuuw">