re PR fortran/29752 (write(*,*,advance='NO'), READ(): Data not flushed)
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Thu, 9 Nov 2006 03:03:40 +0000 (03:03 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Thu, 9 Nov 2006 03:03:40 +0000 (03:03 +0000)
2006-11-08  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR libgfortran/29752
* io/transfer.c (finalize_transfer): Flush on ADVANCE_NO.

From-SVN: r118611

libgfortran/ChangeLog
libgfortran/io/transfer.c

index 3ca21723ac072dda8a6f275b45657a9e705051f4..f8a16721ff80fc34b9a22bbe0f1578a4cfb9324f 100644 (file)
@@ -1,3 +1,8 @@
+2006-11-08  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libgfortran/29752
+       * io/transfer.c (finalize_transfer): Flush on ADVANCE_NO.
+
 2006-11-05  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        * io/transfer.c (next_record_w): Fix indentation.
index 4711be55b0ff1d8c7c82862a443684e03f5a1da1..c8fd5571e5ff1d93bd0007bf1563341bd7cb3972 100644 (file)
@@ -2359,9 +2359,6 @@ finalize_transfer (st_parameter_dt *dtp)
 
   dtp->u.p.current_unit->current_record = 0;
 
-  if (dtp->u.p.advance_status == ADVANCE_NO)
-    return;
-
   if (!is_internal_unit (dtp) && dtp->u.p.seen_dollar)
     {
       dtp->u.p.seen_dollar = 0;
@@ -2369,6 +2366,12 @@ finalize_transfer (st_parameter_dt *dtp)
       return;
     }
 
+  if (dtp->u.p.advance_status == ADVANCE_NO)
+    {
+      flush (dtp->u.p.current_unit->s);
+      return;
+    }
+
   next_record (dtp, 1);
   sfree (dtp->u.p.current_unit->s);
 }