error.c (generate_error): Set both iostat and library_return.
authorPaul Brook <paul@codesourcery.com>
Tue, 31 Aug 2004 23:43:21 +0000 (23:43 +0000)
committerPaul Brook <pbrook@gcc.gnu.org>
Tue, 31 Aug 2004 23:43:21 +0000 (23:43 +0000)
* 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
gcc/testsuite/gfortran.dg/eof_2.f90 [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/runtime/error.c

index a71d3aa1c9217a81a87b258b15af9341f23a0a0b..3dae964820d8fe804ed65fbd591ab64a90c6ecf3 100644 (file)
@@ -1,3 +1,7 @@
+2004-09-01  Paul Brook  <paul@codesourcery.com>
+
+       * gfortran.dg/eof_2.f90: New test.
+
 2004-08-31  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de>
 
        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 (file)
index 0000000..b7c2c91
--- /dev/null
@@ -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
+
index 50ad7a6290f0a40e8101173ca3771a349f37996e..891c74ec9ddc6c166185f78295df932ce29dad56 100644 (file)
@@ -1,3 +1,8 @@
+2004-09-01  Paul Brook  <paul@codesourcery.com>
+
+       * runtime/error.c (generate_error): Set both iostat and
+       library_return.
+
 2004-08-31  Paul Brook  <paul@codesourcery.com>
 
        PR libfortran/16805
index 74670b56d28d426d0457feb29d753607c1382950..5eb5b0bb31e6064641a42ad8d068cb1b2f9ed221 100644 (file)
@@ -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 */