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

    <tr>
        <th>Summary</th>
        <td>
            [flang] DTIO failure with parent component
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            flang:runtime
      </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 :: data
      integer :: i, j
   end type

   type :: base
      type(data) :: d1
   end type

 type, extends(base) :: child
      type(data) :: d2
   end type

 interface write(formatted)
      subroutine writeformatted(dtv, unit, iotype, v_list, iostat, iomsg )
         import base
         class(base), intent(in) :: dtv
         integer,  intent(in) :: unit
 character(*), intent(in) :: iotype
         integer, intent(in)     :: v_list(:)
         integer,  intent(out) :: iostat
         character(*), intent(inout) :: iomsg
      end subroutine
  end interface

end module

program array001b
   use m

   integer :: stat
 character(200) :: msg = ''
   type(child)              :: b3(4)

 namelist /nml2/  b3

   b3 = (/ child(data(1009,1010), data(1011,1012)), child(data(1013,1014), data(1015,1016)),  &
 child(data(1017,1018), data(1019,1020)), child(data(1021,1022), data(1023,1024))/)

   write (6,NML=nml2, iostat=stat, iomsg=msg)
   if ( stat /=  0 ) ERROR STOP 2

end program


subroutine writeformatted (dtv, unit, iotype, v_list, iostat, iomsg)
   use m, only: base, child

 class(base), intent(in) :: dtv
   integer, intent(in) :: unit
 character(*), intent(in) :: iotype
   integer, intent(in)     :: v_list(:)
 integer, intent(out) :: iostat
   character(*), intent(inout) :: iomsg

 select type ( m => dtv )
      class is (base)
         write (unit, *, iostat=iostat )      m%d1
      type is (child)
!print*, "child" !! This line changes Flang's output
         write (unit, *, iostat=iostat )      m%d1
         write (unit, *, iostat=iostat )      m%d2
   end select

end subroutine
```

Flang outputs 14 elements as:
```
> a.out
 &NML2 B3= 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021/
```

Where there should be 16 elements as:
```
> a.out
 &NML2 B3= 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024/
```

It seems the namelist got corrupted as if I enable the `print` inside of the `select type`, Flang outputs less element as:
```
> a.out
 &NML2 B3= child 1009 1010 1011 1012 child 1013 1014 1015 1016 child 1017 1018/
```

Both gfortran and XLF produce the expected output.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzEV1-P2roT_TTmZdSVM4EQHnigUKRK_fNTf5XufbtyEpO4SmxkO9vut78aOwlhYVt1VekiZMDjMz5zPDMOwjlVaym3bPWWrQ4L0fvG2O1BaCXb_b6RelGY6mm7N9qpSlrwjYSTaVvzXekaSlNJlu4Y37GMD2--60zVtxI6muY7APBPZwm0Lt1BJbyIswCgtJe1tKNNMdzDt2iVugq4u04K4eTkJKzCPDjGzbRPctdPXLwH-cNLXTmGefB1wZWNaqtf-ca7vikaexKlhO9WecKdjO2E97JiuJl8ur6wpvdKD-tmi_LKPxK7XitPn8qMfB__aZUb5pwXw7fO1TB3TZJ2Z2P9tUIAULbCzaINcO2l9gxzpeex-ccrd_GEaP0LgMCVk3DCitLT2pzh7qebDHHd3-cZhF4DbBQhp9_Pwr7H0_T-atMg3FyUX1F-7qBz9YSnw78cZZimqSkJYlLQVKyH-PtsTW1FB8Ja8cR5UkR_vZvXy7OyGGnP6SLnM2YhD9IDMFzTe6oXhnnM50HH6TXWUcowX0YpCaVFJ0liYHjUXYsMj0CLRmJFOmyTk2VwPVRHnnBO-iU84YOSkyFJogGDIdhuwEka1yxvwKtoyC5gYJhFRZ47Wce1-Y2TSA35TxhgZIn4HIyRGi5H8PEiGcQiJk0yhvtPHz-w9BC1m2o1PVyVLEsPNI4JrE4EDqdMupPAwKms4d2XL5-_wP-_fv4f4CWdhhSKE4zvXuwn8KqGMvGKOYl7MLp9mrruJFwM__f7ysuV_ocaymtbyT3cyx3klb2DwE62svTDhYY5dFRULH1HGl218yAuKAczgWfta0q88XQDj1nWxS8wVX_HcDXei-ONGr2PXYIYYnK2ioLYRZ84GBEYVUgCXxvloKV8Kxuha-ng2ApdM1w7ML0_9_5Psny1i9klHRW_lNBV354_ujC-C7EMcThIliBb2UntHQh3-6xDxyYeTAyZYfbp4weEtykVMfVDoG5IQ0ID0pDSsKRhRUNGw5qGnAZCICFI6uMtu78aaSU9hVkJrjF9W0EhIcn-M5Y0EAIJQR3yDun3HpyUnQtPj9MdUxsPpbG2P1OvEo4a4XuQWhRtiBBYxmMmZhxUeP4EcxotsyKifXAP1wfXSudGUX5Xk5Dwd5UZLbf6TJao0l0d3hrfQH0y1luhQegK_v5wpH5e9WUMWf44y5LkiGE8LKptWm3SjVjIbbLOcLnc8CRZNFteyFVRZessy5KKF5vV6iSSQiabYpVWZblaqC1yXCUJz5I18X9YFummXONpLdeiSGXCllx2QrUPbfvYPRhbL5RzvdwmWZbz5aIVhWxd-F-AeAr1ne5sr73qJEOkPwt2S9A3RV87tuR0pu7izCvfhr8VEbs6wOHr-89wEqrtrYTvyjdwFpZOpzTd2Wip_aK37bbx_hyOi27ZY6180xcPpekYHsn58PHmbM03qmk8BtqO4XFg_rjFfwMAAP__67iXfA">