[prev in list] [next in list] [prev in thread] [next in thread]
List: gcc-fortran
Subject: [gfortran] Handle end= and iostat=
From: Paul Brook <paul () codesourcery ! com>
Date: 2004-08-31 23:42:56
Message-ID: 200409010042.56968.paul () codesourcery ! com
[Download RAW message or body]
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 */
["eof_2.f90" (text/plain)]
! { 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
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic