This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[gfortran] Handle end= and iostat=


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 */

Attachment: eof_2.f90
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]