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

    <tr>
        <th>Summary</th>
        <td>
            [flang] Reading NULL input field failure
        </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 A
        integer :: i = -1
 end type

    interface read (formatted)
        subroutine formattedRead (dtv, unit, iotype, vlist, iostat, iomsg)
        import A
 class (A), intent(inout) :: dtv ! tcx: (4)
            integer, intent(in) :: unit
            character (*), intent(in) :: iotype
 integer, intent(in) :: vlist(:)
            integer, intent(out) :: iostat
 character(*), intent(inout) :: iomsg
        end subroutine
 end interface
end module

subroutine formattedRead (dtv, unit, iotype, vlist, iostat, iomsg)
use m, only:A
    class (A), intent(inout) :: dtv ! tcx: (4)
    integer, intent(in) :: unit
    character (*), intent(in) :: iotype
    integer, intent(in) :: vlist(:)
    integer, intent(out) :: iostat
    character(*), intent(inout) :: iomsg

    dtv%i = -1
    read (unit, *, iostat=iostat, iomsg=iomsg) dtv%i
end subroutine


program fdtio515a1kl
use m
    type(a)  a1(3)

    write (1, *) '1, ,3, 4'
 write (1, *) ', 20,30,40'

    rewind (1)

    read (1, *) a1
    if (any (a1%i /= (/1, -1, 3/))) ERROR STOP 1

    read (1, *) a1
    if (any (a1%i /= (/-1, 20, 30/))) ERROR STOP 2

    close (1, status='delete')
end
```

The intention of the testing is the 1st READ statement reads `1, ,3, 4`, because the second field is NULL, `a1%i(2)` after the 1st READ is assigned `-1`.
On the 2nd READ statement, the first field in `, 20, 30, 40` is NULL, so `a1%i(1)` after the 2nd READ should be also `-1`. 

It seems ifort, gfortran and XLF all produce the expected output for the 1st READ. But Flang outputs `1, 3, 4`.
The compilers behaves differently on the 2nd READ though.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0Vt1u4zYTfRr6ZhCDomRbuvCF1l4DH7D4UqRboLe0OLLYUqRBUs7m7Yuh5N9m0U2xDQzLlGbOnDlnQkqGoA8Wcc0Wn9hiO5ND7Jxfb6XVaDabDu1s79TbeuNs0Ao9xA6hdca4V20P0DiFLK8Zr9mSTx9e904NBqFnvAYAiG9HhHpa0J-2EQ_ogTLzGjSwfAtPGUWgVSmeEMcECvatbBA8SgVMlK3zvYwRFRPVDWoY9t4NUVsiOEW8TCkqnpjYwGB1pKt2qYbYwMnoMN0KUU6_-nC4h9b90fk49tAYGQJh1hRD8TaijUyU2rohMlGd-1LxBExkEJtvtGSiLO5hb7R4ALpBSZzvc5pOetlEUlCUTLxD5CZ_6pXX_1xqEqOk5Q8Rve93kpA0OhP8Hr_HRFL8Wo6G4OrmeSwug8B4TetxysZB-Q-8HwJNsNiAs-aN5fV5Hn-S_x_x_V_6_SNV3rX8I1bf0vuY21N2smdxuwcAXP7Vz6Yl2ItR-fbRMbozOnfGm4bkbozGz9G7g5c9tCpqt8gWMvvTXPy-7lhMlJLwQGZMlPmozvT81euIxC-7kKuAidW03OR0LZhYUfz3gmklOEXTV8HH8IsAr9qqKau6vS_VI5Y8q6ZbeiTtW7pko6xiR8oma3Yp6yl95_SAnKIPfH55eX6BX78-_wLZzyo21kkdArX4fjlxLdcYF65CkcFDYPmWiZVCgxGTZtVo7MOJw3j9tcNp5rSz4Np0UkUMkc4pHdIyCxFePtfbBI492ph6DMCW_MG7ZeK9x0bSYFBywMZZBa1Gowjw_799-ZJylnxsn4lSEMElB9nG6ay8lNQBpsNWUcpTxpZ8znj9bFOcsOqBGmGn01b7EM9lLUzMrrpuoCAVbikFd8cq-xura7XODUbBHkGaMWskBqOo_4sQEPsAunU-MTrQDy8tSKvg9y87kMbA0Ts1NKNM-O2ITUQFbojHIdJ-fCfEHD4NEXZG2sMUcpX_ov18MrRx_VEb9AH22MkTBlC6bdGjjeYN3IN0sXPDoZvP1DpXVV7JGa6z1WKxqvKiqGbduikFLiueiawoscqKsm14o1qZZbxZrvaLmV4LLha8FFm2FAWv5gqbVcalRNUKUVbICo691GZuzKmfO3-Y6RAGXGeLYlVlMyP3aEJ6lxKipRZZXvvBRt0jE4JesPyaUp_2wyGwgtPuG65gUUeTXsXG3MUW6BCjASZnQdskaJqEVmozeJwN3qy7GI8h7eA7JnYHHbthP29cz8SOoKfL09G7P7CJTOwS6UAbwsj7tBZ_BQAA__-vZeGw">