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

    <tr>
        <th>Summary</th>
        <td>
            [flang] Failure when reading 3 level of nested namelist.
        </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 reducer:
```
module m
   type data
      integer :: k
 end type

   type container
      integer :: j
      type(data) :: d
 end type

   type base
      integer :: i
      type(container) :: c
 end type

   interface read(formatted)
      subroutine readformatted(dtv, unit, iotype, v_list, iostat, iomsg )
         import base
 class(base), intent(inout) :: 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 position102kl
   use m

   integer :: stat
 character(200) :: msg = ''
   type(base) :: b1
   type(base) :: b2
 namelist /nml/ b1, b2

   open (1, file = 'position102kl.1', form='formatted', access='sequential' )

   read (1,NML=nml, iostat=stat, iomsg=msg)
   if ( stat /=  0 ) ERROR STOP 1

end program


subroutine readformatted (dtv, unit, iotype, v_list, iostat, iomsg)
   use m, only: base, container
   interface read(formatted)
      subroutine containerreadformatted(dtv, unit, iotype, v_list, iostat, iomsg )
 import container
         class(container), intent(inout) :: 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

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

   type(container) :: c1
   namelist /basedtio/ c1

   read (unit, "(TL100, I4)", iostat=iostat, iomsg=iomsg) dtv%i

   if ( iostat /= 0 ) ERROR STOP 6

   read (unit, basedtio, iostat=iostat, iomsg=iomsg)

   if ( iostat /= 0 ) ERROR STOP 7

end subroutine

subroutine containerreadformatted(dtv, unit, iotype, v_list, iostat, iomsg )
   use m, only: container, data

   interface read(formatted)
      subroutine datareadformatted(dtv, unit, iotype, v_list, iostat, iomsg )
         import data
         class(data), intent(inout) :: dtv ! tcx: (4)
         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

 class(container), intent(inout) :: dtv ! tcx: (4,4)
   integer,  intent(in) :: unit
   character(*), intent(in) :: iotype
   integer, intent(in)     :: v_list(:)
   integer,  intent(out) :: iostat
   character(*), intent(inout) :: iomsg

   type(data) :: d1
   namelist /containerdtio/ d1

   read (unit, "(TR10, T1,I4)", iostat=iostat)  dtv%j

   if ( iostat /= 0 ) ERROR STOP 10

   read (unit, containerdtio, iostat=iostat, iomsg=iomsg)

end subroutine

subroutine datareadformatted(dtv, unit, iotype, v_list, iostat, iomsg )
   use m, only: data

   class(data), intent(inout) :: dtv ! tcx: (4)
   integer,  intent(in) :: unit
 character(*), intent(in) :: iotype
   integer, intent(in)     :: v_list(:)
 integer,  intent(out) :: iostat
   character(*),  intent(inout) :: iomsg

   read (unit, "(5X, TL99, I4)", iostat=iostat )  dtv%k
end subroutine
```

The input file `position102kl.1` is:
```
&NML
 B1=1001 &BASEDTIO
 C1=1002 &CONTAINERDTIO
 D1=1003
 /
 / B2=2001   &BASEDTIO
 C1=2002 &CONTAINERDTIO
 D1=2003
 /
 /
 /
```

Flang failed at 
```
> a.out
Fortran ERROR STOP: code 6
```

When both gfortran and XLF executed passed this point.

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsmEtv2zgQgH8NfRnUoEaWLR98UKQYKJBtFmmA7W1BS5TNViK9IpW2_34xetjyq4mzyWIPWxhVxOEMh_P4RElYq9ZaygULbliQjETtNqZaJEIrWcTxRurRymQ_F7HRVmWyAreRkJuiMN-VXkMlszqVFfMjxiM25d2PR6XJ6kJCyXgEAO7nVkImnGhvAUBpJ9eyAtL0I_hGAqmzZiaZ2qulRjuhtKwu6X7dCRplDJuFcN7Ls8u2V8LKS2bVsdm9I3vb6VnbZKnKRSqhkiJjGOamKoVzMmM435m19aoytVO6nTaYE2buiWEMtVaOrsq0LsTw9GehbDdmnej-Ku0ahpbJhXJrKrfbYFoIaxmGzT3OGzXtpHYMQ6VN7Ybxck8HltqwkMpQZ6DQuEmLbEQlUkdzQ4bR6ToDnW5L59c5UqF_nVq__5Duj3Z8zs_DnXUxGyg96_KxgdKud_qU930S22Ea26W_LQgaatuhvd9WZl2JErbGKqeM9jh-K1rt2rYtsy-jQUH2vg99Rs4H7jV14CfAcEa_XZ3vE9_PXHm_lCJJtSglRRsYLnVZMFySGsatuNU3W6mBYdiM56qQ_foHmxt7jUcxUI0zP2E4G1R7IxFpKq1tZVb-VUvtlCgYzrrCbpejPumX-_TbHfOTxrFdN_jJQVMwP6H_-zpROek2caQ9kafAyT7cPjzcP8Dnx_vfwdsnrUtUO8B4dKlh4VUdu3OrTTrGYHTxswl_k434mHxXU2Wn_3Z46bByymTqpY4xQ06-BDQvB8yLu_YsaP5DgHljwgyCfwXgL8fjJOz_dsDPaV6K9CsRfsC_s4_2DpFDDFJ0M6cMsTD1TrDUNxRDZBg-3nlE5xg-Thqn8ABUxzSgkZYKTX4wUPvnQMutVqMn1wm4phfd2Xv9ovWvXHe2B-ZBqR4C8x1YdIacgzzG_XnzlfAk7Xc7lh0chQfd251cn-teYOiBS3_QLcNw8hJQ_X9iu4Knr3mUnSYlnpwD2jvB9p-k48pEvAVxj9_RzsB2F_yeuNmzxH3wGuA-0vnwl9SdQ0fZr1fSzuMXfTjy9wrWPsPOt0bRCTYPSPlWLHp_Cr224N-k3F9a7-crNfjS1OndfP7MAQEGtfrtbKkMProwHj1uJCi9rV33Njblx29iUw7Knn6wYTilNyoewY3H_MTj3AOG05vo823y-PGeBHEnQBLE958eo4-fbh96adJJfbqh9mkvcIPMT5DMwVmD-EuDeGJwfzna-rIQeg25UIXMgCJ3NMO_BTGmVPFoaSpXCT1o7Pb0kMn2GHVo-I-N1LAybgPrvFMUOoMvd0uQP2Ra0yvgVlgrM3AbZWFrlHZjxqNRtvCzuT8XI7nwZkEQenzqTUebRSBX85k_52kWeDnPBfpSBnmWrTALwhnPR2qBHAMeooeex73pOJBylvHpFHnoTWcZZxMuS6GKcVE8lWNTrUfK2louvGASTvxRIVaysM1HPcScAsP8qKq1U6WkQguSUbUg1Q-rem3ZhFOT2L0xp1zRfBNsdYMElkIVdSXhOwWDilrpNfhQyCdZgMlBS0tx6AE-HtVVsdg4t21qDZcMl2vlNvVqnJqS4ZKW6i4ftpX5KlPHcNlswjJcdvt4WuDfAQAA__9U6QEY">