aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2016-10-30 22:14:01 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2016-10-30 22:14:01 +0000
commitd4fc670294f037e0a8e8f4bdbb7ea80640f463e5 (patch)
treead49bed54951ceabdcb4409b96fed44a089970a1
parent396e56d2da7935f96f4ca133c359668cc6c98eaf (diff)
downloadgcc-d4fc670294f037e0a8e8f4bdbb7ea80640f463e5.zip
gcc-d4fc670294f037e0a8e8f4bdbb7ea80640f463e5.tar.gz
gcc-d4fc670294f037e0a8e8f4bdbb7ea80640f463e5.tar.bz2
re PR libfortran/78123 (Short reads with T edit descriptor not padding correctly)
2016-10-30 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR fortran/78123 * io/transfer.c (formatted_transfer_scalar_read): Clear seen_eor only if we have tabbed to left of current position. * gfortran.dg/fmt_t_9.f: New test. From-SVN: r241691
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/fmt_t_9.f41
-rw-r--r--libgfortran/ChangeLog6
-rw-r--r--libgfortran/io/transfer.c3
4 files changed, 54 insertions, 1 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d65ebb4..c8d3650 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-10-30 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/78123
+ * gfortran.dg/fmt_t_9.f: New test.
+
2016-10-30 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/67219
diff --git a/gcc/testsuite/gfortran.dg/fmt_t_9.f b/gcc/testsuite/gfortran.dg/fmt_t_9.f
new file mode 100644
index 0000000..bfe0361d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/fmt_t_9.f
@@ -0,0 +1,41 @@
+! { dg-options "-ffixed-line-length-none -std=gnu" }
+! { dg-do run }
+! PR78123 Short reads with T edit descriptor not padding correctly
+ PROGRAM tformat
+C
+ INTEGER MXFLTL
+ PARAMETER (MXFLTL = 99999)
+ INTEGER IFLGHT, NFLCYC, IFLTSQ(MXFLTL), IDXBLK, LMAX, LMIN, I
+C
+ OPEN(29, status='scratch')
+ WRITE(29, '(a)') " 1 1 1 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT 72 122 4"
+ WRITE(29, '(a)') ""
+ WRITE(29, '(a)') " 451 402012011201120112011200120112011201120112011201120111971201120112011201120112011201"
+ WRITE(29, '(a)') " 451 4020 866 866 866 866 866 866 866 866 865 866 865 866 866 866 866 866 866 866 865 866"
+ REWIND(29)
+C The error occurs in the following loop:
+ 10 CONTINUE
+ READ(29,1010 ) IDXBLK, LMAX, LMIN
+1010 FORMAT(8X,I4,T51,2I5) ! wrong if this format is used
+c write(6,fmt='("IDXBLK,LMAX,LMIN=",3I5)')IDXBLK,LMAX,LMIN
+ IF (IDXBLK .EQ. 0) GO TO 20
+ GO TO 10
+C
+ 20 CONTINUE
+ READ(29,1040,END=100) IFLGHT, NFLCYC,
+ & (IFLTSQ(I), I=1,NFLCYC)
+1040 FORMAT(I5,I5,2X,(T13,20I4))
+c write(6,fmt='(2i6)') IFLGHT,NFLCYC
+c write(6,fmt='(20I4)') (IFLTSQ(I), I=1,NFLCYC)
+c write(6,*) "Program is correct"
+ close(29)
+ if (IFLGHT.ne.451) call abort
+ if (NFLCYC.ne.40) call abort
+ stop
+C
+ 100 CONTINUE
+C write(6,*) "End of file encountered (wrong)"
+ close (29)
+ call abort
+ STOP
+ END
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 1073723..78d3949 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,3 +1,9 @@
+2016-10-30 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ PR fortran/78123
+ * io/transfer.c (formatted_transfer_scalar_read): Clear seen_eor
+ only if we have tabbed to left of current position.
+
2016-10-26 Fritz Reese <fritzoreese@gmail.com>
* libgfortran.h (IOPARM_OPEN_HAS_READONLY, IOPARM_OPEN_HAS_SHARE,
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index b8eb5ed..5830362 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -1579,7 +1579,8 @@ formatted_transfer_scalar_read (st_parameter_dt *dtp, bt type, void *p, int kind
dtp->u.p.current_unit->bytes_left -= dtp->u.p.sf_seen_eor;
dtp->u.p.skips -= dtp->u.p.sf_seen_eor;
bytes_used = pos;
- dtp->u.p.sf_seen_eor = 0;
+ if (dtp->u.p.pending_spaces == 0)
+ dtp->u.p.sf_seen_eor = 0;
}
if (dtp->u.p.skips < 0)
{