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

    <tr>
        <th>Summary</th>
        <td>
            [Flang] User-defined READ/WRITE failed at `SetAsynchronous()` even though it has `ASYNCHRONOUS=NO`.
        </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 mUserData

    type tUserData
 integer :: sin
        character(len = 30) :: name
    end type tUserData

    interface read(formatted)
        subroutine readUserData(userObj, unit, iotype, v_list, iostat, iomsg)
 import tUserData
            class(tUserData), intent(inout) :: userObj
 integer, intent(in) :: unit
            character(len = *), intent(in) :: iotype
            integer, dimension( : ), intent(in) :: v_list
            integer, intent(out) :: iostat
            character(len = *), intent(inout) :: iomsg
        end subroutine readUserData
    end interface

    interface write(formatted)
        subroutine writeUserData(userObj, unit, iotype, v_list, iostat, iomsg)
 import tUserData
            class(tUserData), intent(in) :: userObj
 integer, intent(in) :: unit
            character(len = *), intent(in) :: iotype
            integer, dimension( : ), intent(in) :: v_list
 integer, intent(out) :: iostat
            character(len = *), intent(inout) :: iomsg
        end subroutine writeUserData
    end interface

end module mUserData


program childAsynchSpec01
    use mUserData

    type(tUserData) :: userIn
    type(tUserData) :: userOut = tUserData(123456789,"Exit, Stage-Right")
    character(len = 256) :: iMsg

    open(203, file='childAsynchSpec01.dat',&
 access='stream', asynchronous='no', iomsg=iMsg,&
        form='formatted', action='readwrite', iostat=iStat)
    if (iStat /= 0) then
        write(0, *) "OPEN() <", iStat, "> ", iMsg
        error stop( 1 )
    end if

 write(203, '(DT(40,40))', iomsg=iMsg, iostat=iStat) userOut
    if (iStat /= 0) then
        write(0, *) "WRITE() <", iStat, "> ", iMsg
    end if

    rewind(203, iomsg=iMsg, iostat=iStat)
    if (iStat /= 0) then
 write(0, *) "REWIND() <", iStat, "> ", iMsg
        error stop( 2 )
    end if

    read(203, '(DT(40,40))', iomsg=iMsg, iostat=iStat) userIn
    if (iStat /= 0) then
        write(0, *) "READ() <", iStat, "> ", iMsg
    end if

    close(203, iomsg=iMsg, iostat=iStat)
    if (iStat /= 0) then
        write(0, *) "CLOSE() <", iStat, "> ", iMsg
 error stop( 3 )
    end if

end program childAsynchSpec01

subroutine readUserData(userObj, unit, iotype, v_list, iostat, iomsg)
    use mUserData, only : tUserData

    class(tUserData), intent(inout) :: userObj
    integer, intent(in) :: unit
    character(len = *), intent(in) :: iotype
    integer, dimension( : ), intent(in) :: v_list
    integer, intent(out) :: iostat
    character(len = *), intent(inout) :: iomsg


    read(unit, '(I9,A30)', iomsg=iomsg,&
 asynchronous='no', iostat=iostat) userObj%sin, userObj%name           !! This line is causing runtime error
!          iostat=iostat) userObj%sin, userObj%name                            !! This line executes fine.

end subroutine readUserData

subroutine writeUserData(userObj, unit, iotype, v_list, iostat, iomsg)
    use mUserData, only : tUserData

 class(tUserData), intent(in) :: userObj
    integer, intent(in) :: unit
 character(len = *), intent(in) :: iotype
    integer, dimension( : ), intent(in) :: v_list
    integer, intent(out) :: iostat
    character(len = *), intent(inout) :: iomsg

    write(unit, '(I9,A30)', iostat=iostat, iomsg=iomsg,&
          asynchronous='no') userObj%sin, userObj%name. !! This line is causing runtime error
!          userObj%sin, userObj%name !! This one executes fine.

end subroutine writeUserData
```

The execution of `a.out` has
```
> a.out

fatal Fortran runtime error(/home/cdchen/temp/t.f:99): SetAsynchronous() called when not in an OPEN or external I/O statement
IOT/Abort trap(coredump)
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkWFuPo7gS_jXOS6kjMLmQhzxwkqDT0pnOUadHo31aOVAEj8CObNM9_e9XBSQht76vNNpFUUB2uez66vvsAmGt3CjEKRv-hw3nPVG5XJvpXCiJxWyWo-qtdfo8nWllZYoGXI6Q6aLQT1JtINEpsiBiXsRGXvvzolKnVYFQfrdo5sIJ6vYiAAD3vEVwnXaQyuEGDZCXIAIrVWtKV5ILIxKHhvGwQAUsmEPgMT7ZmStRYmuPKj133_bRJCYTCYJBkTIeZtqUwjlMGZ905rPV2ujKSdUY7h3xsLJoluufjM-gUtLRXWqajp4e_yykbdusE-1TaTetd1lutXHHcXeupBDWMh4e-vmkdqEcKsd4KJWuXCfq3WIO8J2Yd21ptSfzXUCV8eh81o6bNthjR53JU1mislIrxkMaAy96awG76m0_6jjuFt0PRnPqi_JzcEX0uZb-A8H2RLrErScjHb6JXLXl78Oufya1fis-HWf8KqGo6fLuybxoa_TGiBKSXBZpZJ9Vkq-2mHh-66-yV_fck_x3s32r3ma3rFyNRac_9HkwGI7GIUHDOF_8ari7cmKDN_dykzvG-UEFl6Dlw1EXxW81iK293iIlnXsBec1kgSyYMz4-A6CfkizG9SpGNFgkCVrbWFtnUJRNN4h6lNFKV2230m1Xk8FgXq9h76m9SNONfUfdjcfEETfrPto12l1g3BFsMJerWrg7IGQGRCFqBMZjwqE-1VyO3eNvt6F45KvhIDDOl_9f3DEeNrDNaoRn0M5AdpwFC9g1fztmpTHagHV6S2Ly4bCkmoxZi_1u4hb5Oppw_sB4OKC10N-k_l0C7jzqHX--JPof97cPiw-EfxQgABh8kio9BPlqFG9c_ZVl3y9-3N7NvyRt_Fra6qhE-sWJ228Qn8vb_SL6SPinASaFtvj1WXt57bP_LVfv5txx0oIrSaPnlzZ25kV_U1V6dmLwGWhVPNdn7IUi-jNl6pXy7lo58eky4msq03dWEJ-sHM5EvEtpo-Jb8hIF3gX5Nkndn30vHXE7dbSMmOyTxIf06kVE2jfQy1WnMGLcZ9yHh1xaKIiM0kIiKkvvgaZSTpbYcJ4C4X6nlvvMrGfX2TLwFyaVQwuZVNg_qOp6NX-sqS8txt8lqg-X5u-R079VS93t_HUlnTD0qrj211WVvUru_seV9Jpsuo7126Rx-mLS_Y7DvOgh33mRWoHOgI080SfQRx7kwp6OCBbQdNejM-FEAbE2zgh1EhqdpnGuS2Q8TtKEzmEeOyy3dOtnLIgmdakSRLBCF3Xhbg7iRBQFpvCUowKlHUgFQgEVx6AN4C-HRokCbhmPl0BpxZJI40W3ywfG42hdvzUbQcdzog2mFc096UbUS6dBOgkmoodTfxyMR4PxeOL18mnKeZhmiUjGvh8ORTrh2TBF3x-kIz4IPd6TU-7xoefzwB8OR4HX95PBYD1GP818vvYxYAMPSyGLflE8ln1tNj1pbYVTnw_8YNgrxBoLW3-V4zwrhNqwIGoBpDpjOO-ZKQ29WVcbywYeSc0enDnpivqjXlyPHc6BcnyTIjEhhaYYi-taGjIhCUiqjEbeRawp2fiIClyuq00O0lHuyTxa_XE3--_98m75fcWC-d2Sjbx-rzLFNHdua0mWPGY83kiXV-t-okvGY1ple7vZGv0TE8d4XMdvGY9bCB6n_K8AAAD__-IH_2g">