| Issue |
124135
|
| Summary |
[Flang] User-defined READ/WRITE failed at `SetAsynchronous()` even though it has `ASYNCHRONOUS=NO`.
|
| Labels |
flang:runtime
|
| Assignees |
|
| Reporter |
DanielCChen
|
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="" 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)
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs