From 244fada7d093f23e27bbb8af97d99bb9a876e9b0 Mon Sep 17 00:00:00 2001 From: Paul Brook Date: Tue, 31 Aug 2004 23:43:21 +0000 Subject: [PATCH] error.c (generate_error): Set both iostat and library_return. * runtime/error.c (generate_error): Set both iostat and library_return. testsuite/ * gfortran.dg/eof_2.f90: New test. From-SVN: r86852 --- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gfortran.dg/eof_2.f90 | 13 +++++++++++++ libgfortran/ChangeLog | 5 +++++ libgfortran/runtime/error.c | 13 +++++++------ 4 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/eof_2.f90 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a71d3aa1c92..3dae964820d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2004-09-01 Paul Brook + + * gfortran.dg/eof_2.f90: New test. + 2004-08-31 Tobias Schlueter PR fortran/16579 diff --git a/gcc/testsuite/gfortran.dg/eof_2.f90 b/gcc/testsuite/gfortran.dg/eof_2.f90 new file mode 100644 index 00000000000..b7c2c9172c9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/eof_2.f90 @@ -0,0 +1,13 @@ +! { 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 + diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 50ad7a6290f..891c74ec9dd 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,8 @@ +2004-09-01 Paul Brook + + * runtime/error.c (generate_error): Set both iostat and + library_return. + 2004-08-31 Paul Brook PR libfortran/16805 diff --git a/libgfortran/runtime/error.c b/libgfortran/runtime/error.c index 74670b56d28..5eb5b0bb31e 100644 --- a/libgfortran/runtime/error.c +++ b/libgfortran/runtime/error.c @@ -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 *message) 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 */