diff options
author | Jakub Jelinek <jakub@redhat.com> | 2005-09-03 20:54:55 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2005-09-03 20:54:55 +0200 |
commit | 36dd4221c5479fca196cea27bbf5b34eae4e4b3c (patch) | |
tree | 1c6c7c5354ccc52e6cffdee4b059b9730f9ad16c | |
parent | 7a6b7528533ea6d23a5b1a5624b4f68faf079a38 (diff) | |
download | gcc-36dd4221c5479fca196cea27bbf5b34eae4e4b3c.zip gcc-36dd4221c5479fca196cea27bbf5b34eae4e4b3c.tar.gz gcc-36dd4221c5479fca196cea27bbf5b34eae4e4b3c.tar.bz2 |
read.c (read_x): Take int argument instead of fnode * and digging the N from F->u.n.
* io/read.c (read_x): Take int argument instead of fnode * and
digging the N from F->u.n.
* io/io.h (read_x): Adjust prototype.
* io/transfer.c (formatted_transfer): Adjust callers. Don't clobber
f->u.n for FMT_T.
* gfortran.dg/fmt_t_1.f90: New test.
From-SVN: r103811
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/fmt_t_1.f90 | 12 | ||||
-rw-r--r-- | libgfortran/ChangeLog | 8 | ||||
-rw-r--r-- | libgfortran/io/io.h | 2 | ||||
-rw-r--r-- | libgfortran/io/read.c | 6 | ||||
-rw-r--r-- | libgfortran/io/transfer.c | 7 |
6 files changed, 28 insertions, 11 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 496ecc3..17b5b03 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2005-09-03 Jakub Jelinek <jakub@redhat.com> + * gfortran.dg/fmt_t_1.f90: New test. + +2005-09-03 Jakub Jelinek <jakub@redhat.com> + PR rtl-optimization/23454 * g++.dg/opt/pr23454.C: New test. diff --git a/gcc/testsuite/gfortran.dg/fmt_t_1.f90 b/gcc/testsuite/gfortran.dg/fmt_t_1.f90 new file mode 100644 index 0000000..157ba13 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/fmt_t_1.f90 @@ -0,0 +1,12 @@ +! { dg-do run } + integer nrow, vec(15) + open (10, status="scratch") + write (10, fmt='(a)') '001 1 2 3 4 5 6' + write (10, fmt='(a)') '000000 7 8 9101112' + write (10, fmt='(a)') '000000131415' + rewind (10) + read (10, fmt='(i6, (t7, 6i2))') nrow, (vec(i), i=1,15) + close (10) + if (nrow.ne.1) call abort + if (any (vec.ne.(/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15/))) call abort + end diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index a2dba91..02df5fd 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,11 @@ +2005-09-03 Jakub Jelinek <jakub@redhat.com> + + * io/read.c (read_x): Take int argument instead of fnode * and + digging the N from F->u.n. + * io/io.h (read_x): Adjust prototype. + * io/transfer.c (formatted_transfer): Adjust callers. Don't clobber + f->u.n for FMT_T. + 2005-09-02 Francois-Xavier Coudert <coudert@clipper.ens.fr> * io/unix.c (stream_ttyname): Protect use of ttyname by diff --git a/libgfortran/io/io.h b/libgfortran/io/io.h index 83f2dfb..06825df 100644 --- a/libgfortran/io/io.h +++ b/libgfortran/io/io.h @@ -589,7 +589,7 @@ internal_proto(read_f); extern void read_l (fnode *, char *, int); internal_proto(read_l); -extern void read_x (fnode *); +extern void read_x (int); internal_proto(read_x); extern void read_radix (fnode *, char *, int, int); diff --git a/libgfortran/io/read.c b/libgfortran/io/read.c index 64231b9..ec6077c 100644 --- a/libgfortran/io/read.c +++ b/libgfortran/io/read.c @@ -831,12 +831,8 @@ read_f (fnode * f, char *dest, int length) * and never look at it. */ void -read_x (fnode * f) +read_x (int n) { - int n; - - n = f->u.n; - if ((current_unit->flags.pad == PAD_NO || is_internal_unit ()) && current_unit->bytes_left < n) n = current_unit->bytes_left; diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index c7d53ee..7449f02 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -705,7 +705,7 @@ formatted_transfer (bt type, void *p, int len) /* Writes occur just before the switch on f->format, above, so that trailing blanks are suppressed. */ if (g.mode == READING) - read_x (f); + read_x (f->u.n); break; @@ -736,10 +736,7 @@ formatted_transfer (bt type, void *p, int len) if (g.mode == READING) { if (skips > 0) - { - f->u.n = skips; - read_x (f); - } + read_x (skips); if (skips < 0) { move_pos_offset (current_unit->s, skips); |