[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