]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR libfortran/34887 (reverse tabbing before slash descriptor (regression vs. g77))
authorThomas Koenig <tkoenig@gcc.gnu.org>
Sat, 26 Jan 2008 15:22:59 +0000 (15:22 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Sat, 26 Jan 2008 15:22:59 +0000 (15:22 +0000)
2008-01-26  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR libfofortran/34887
* io/transfer.c (next_record_w): Always move to the farthest
position when completing the record (also when we are
processing a slash edit descriptor).

2008-01-26  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR libfofortran/34887
* gfortran.dg/x_slash_2.f:  New test.

From-SVN: r131864

gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/x_slash_2.f [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/io/transfer.c

index 6535805cc96666c14b2d1067aaf7f714af1363b5..583a15890cf971cfe81613be4aa4250708b9a2e1 100644 (file)
@@ -1,3 +1,8 @@
+2008-01-26  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR libfofortran/34887
+       * gfortran.dg/x_slash_2.f:  New test.
+
 2008-01-26  Richard Guenther  <rguenther@suse.de>
 
        PR c++/34235
diff --git a/gcc/testsuite/gfortran.dg/x_slash_2.f b/gcc/testsuite/gfortran.dg/x_slash_2.f
new file mode 100644 (file)
index 0000000..6023b64
--- /dev/null
@@ -0,0 +1,11 @@
+! { dg-do run }
+! PR 34887 - reverse tabs followed by a slash used to confuse I/O.
+      program main
+      character(len=2) :: b, a
+      open(10,form="formatted")
+      write (10,'(3X, A, T1, A,/)') 'aa', 'bb'
+      rewind(10)
+      read (10,'(A2,1X,A2)') b,a
+      if (a /= 'aa' .or. b /= 'bb') call abort
+      close(10,status="delete")
+      end
index 1c9148c13d07ab031551b9e370048743e9a721cd..a83ee24daae774631bedd286471e548387668fb9 100644 (file)
@@ -1,3 +1,10 @@
+2008-01-26  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR libfofortran/34887
+       * io/transfer.c (next_record_w): Always move to the farthest
+       position when completing the record (also when we are
+       processing a slash edit descriptor).
+
 2008-01-25  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libfortran/34876
index e94eb7431e681a926caa9ebfbcd0c013725d7438..52c6314349db9abb8416a57a03fd21663c348ab0 100644 (file)
@@ -2573,21 +2573,18 @@ next_record_w (st_parameter_dt *dtp, int done)
        }
       else
        {
-         /* If this is the last call to next_record move to the farthest
-         position reached in preparation for completing the record.
-         (for file unit) */
-         if (done)
-           {
-             m = dtp->u.p.current_unit->recl -
-                       dtp->u.p.current_unit->bytes_left;
-             if (max_pos > m)
-               {
-                 length = (int) (max_pos - m);
-                 p = salloc_w (dtp->u.p.current_unit->s, &length);
-               }
-           }
          size_t len;
          const char crlf[] = "\r\n";
+
+         /* Move to the farthest position reached in preparation for
+         completing the record.  (for file unit) */
+         m = dtp->u.p.current_unit->recl -
+           dtp->u.p.current_unit->bytes_left;
+         if (max_pos > m)
+           {
+             length = (int) (max_pos - m);
+             p = salloc_w (dtp->u.p.current_unit->s, &length);
+           }
 #ifdef HAVE_CRLF
          len = 2;
 #else