From 3aeb697a2158d359d9f951f6c6c6bcd9c53c8c2f Mon Sep 17 00:00:00 2001 From: Jerry DeLisle Date: Wed, 24 Jul 2024 10:29:08 -0700 Subject: Fortran: Suppress wrong End Of File error with user defined IO. PR libfortran/105361 libgfortran/ChangeLog: * io/list_read.c (finish_list_read): Add a condition check for a user defined derived type IO operation to avoid calling the EOF error. gcc/testsuite/ChangeLog: * gfortran.dg/pr105361.f90: New test. --- gcc/testsuite/gfortran.dg/pr105361.f90 | 41 ++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/pr105361.f90 (limited to 'gcc') diff --git a/gcc/testsuite/gfortran.dg/pr105361.f90 b/gcc/testsuite/gfortran.dg/pr105361.f90 new file mode 100644 index 0000000..e2d3b07 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr105361.f90 @@ -0,0 +1,41 @@ +! { dg-do run } + +module x + implicit none + type foo + real :: r + end type foo + interface read(formatted) + module procedure read_formatted + end interface read(formatted) +contains + subroutine read_formatted (dtv, unit, iotype, vlist, iostat, iomsg) + class (foo), intent(inout) :: dtv + integer, intent(in) :: unit + character (len=*), intent(in) :: iotype + integer, intent(in) :: vlist(:) + integer, intent(out) :: iostat + character (len=*), intent(inout) :: iomsg + read (unit,*,iostat=iostat,iomsg=iomsg) dtv%r + !print *,dtv%r + end subroutine read_formatted +end module x + +program main + use x + implicit none + type(foo) :: a, b + real :: c, d + open(10, access="stream") + write(10) "1 2" ! // NEW_LINE('A') + close(10) + open(10) + read(10,*) c, d + if ((c /= 1.0) .or. (d /= 2.0)) stop 1 + rewind(10) + !print *, c,d + read (10,*) a, b + close(10, status="delete") + if ((a%r /= 1.0) .or. (b%r /= 2.0)) stop 2 + !print *, a,b +end program main -- cgit v1.1