]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR libfortran/48960 (OPEN statement modifies NEWUNIT variable on error)
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Wed, 26 Dec 2012 18:11:42 +0000 (18:11 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Wed, 26 Dec 2012 18:11:42 +0000 (18:11 +0000)
2012-12-26  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR libfortran/48960
* io/open.c (st_parameter_open):  Assign newunit number to user
variable only if the the associated open statement is successful.

From-SVN: r194724

libgfortran/ChangeLog
libgfortran/io/open.c

index debd88c8f4f66f4515e77c52f3ebcb7257e21a1e..04803ec28d61c28dc91905b493d61ca0aa6d3c3b 100644 (file)
@@ -1,3 +1,9 @@
+2012-12-26  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libfortran/48960
+       * io/open.c (st_parameter_open):  Assign newunit number to user
+       variable only if the the associated open statement is successful. 
+
 2012-12-26  Janne Blomqvist  <jb@gcc.gnu.org>
 
        PR fortran/55539
index d086d2edfef9406ee8669c7159726ec7d4e592ac..c6b73033e864c0c0716b99f2ea2cf9800af008fa 100644 (file)
@@ -844,10 +844,7 @@ st_open (st_parameter_open *opp)
   if ((opp->common.flags & IOPARM_LIBRETURN_MASK) == IOPARM_LIBRETURN_OK)
     {
       if ((opp->common.flags & IOPARM_OPEN_HAS_NEWUNIT))
-       {
-         *opp->newunit = get_unique_unit_number(opp);
-         opp->common.unit = *opp->newunit;
-       }
+       opp->common.unit = get_unique_unit_number(opp);
 
       u = find_or_create_unit (opp->common.unit);
       if (u->s == NULL)
@@ -859,6 +856,10 @@ st_open (st_parameter_open *opp)
       else
        already_open (opp, u, &flags);
     }
-
+    
+  if ((opp->common.flags & IOPARM_OPEN_HAS_NEWUNIT)
+      && (opp->common.flags & IOPARM_LIBRETURN_MASK) == IOPARM_LIBRETURN_OK)
+    *opp->newunit = opp->common.unit;
+  
   library_end ();
 }