aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2005-09-03 20:54:55 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2005-09-03 20:54:55 +0200
commit36dd4221c5479fca196cea27bbf5b34eae4e4b3c (patch)
tree1c6c7c5354ccc52e6cffdee4b059b9730f9ad16c
parent7a6b7528533ea6d23a5b1a5624b4f68faf079a38 (diff)
downloadgcc-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/ChangeLog4
-rw-r--r--gcc/testsuite/gfortran.dg/fmt_t_1.f9012
-rw-r--r--libgfortran/ChangeLog8
-rw-r--r--libgfortran/io/io.h2
-rw-r--r--libgfortran/io/read.c6
-rw-r--r--libgfortran/io/transfer.c7
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);