[gfortran] Handle end= and iostat=
Paul Brook
paul@codesourcery.com
Tue Aug 31 23:43:00 GMT 2004
The end= specifier was being ignored on IO data transfer statements when the
iostat= specified was also used. Patch below fixes this.
Tested on i686-linux.
Applied to mainline.
Paul
2004-09-01 Paul Brook <paul@codesourcery.com>
* runtime/error.c (generate_error): Set both iostat and
library_return.
testsuite/
* gfortran.dg/eof_2.f90: New test.
Index: runtime/error.c
===================================================================
RCS file: /var/cvsroot/gcc-cvs/gcc/libgfortran/runtime/error.c,v
retrieving revision 1.4
diff -u -p -r1.4 error.c
--- runtime/error.c 28 Aug 2004 19:48:02 -0000 1.4
+++ runtime/error.c 31 Aug 2004 21:46:13 -0000
@@ -445,13 +445,11 @@ translate_error (int code)
void
generate_error (int family, const char *message)
{
-
+ /* Set the error status. */
if (ioparm.iostat != NULL)
- {
- *ioparm.iostat = family;
- return;
- }
+ *ioparm.iostat = family;
+ /* Report status back to the compiler. */
switch (family)
{
case ERROR_EOR:
@@ -468,10 +466,13 @@ generate_error (int family, const char *
default:
ioparm.library_return = LIBRARY_ERROR;
+ if (ioparm.err != 0)
+ return;
break;
}
- if (ioparm.err != 0)
+ /* Return if the user supplied an iostat variable. */
+ if (ioparm.iostat != NULL)
return;
/* Terminate the program */
-------------- next part --------------
! { dg-do run }
! Check that end= and iostat= specifiers are honoured when both are used
program eof_2
integer ierr, i
open (11, status="SCRATCH")
ierr = 0
read (11, *, end=10, iostat=ierr) i
call abort
10 continue
if (ierr .ge. 0) call abort
end program
More information about the Fortran
mailing list