aboutsummaryrefslogtreecommitdiff
path: root/libgfortran/io
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2007-03-15 01:25:27 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2007-03-15 01:25:27 +0000
commit22cbc70726b96dbdc4b5fee428af20843423190a (patch)
tree9bbc9ec536b7e5d79d91dac13e2a816137da8271 /libgfortran/io
parent15ce86a7e56acbdda0548863bf2071f92e11f739 (diff)
downloadgcc-22cbc70726b96dbdc4b5fee428af20843423190a.zip
gcc-22cbc70726b96dbdc4b5fee428af20843423190a.tar.gz
gcc-22cbc70726b96dbdc4b5fee428af20843423190a.tar.bz2
re PR fortran/31051 ([4.2 Only] gfortran bug with x and t format descriptors.)
2007-03-14 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libgfortran/31051 * io/transfer.c (formatted_transfer_scalar): Adjust position for pending spaces when in writing mode. Clean up some formatting. From-SVN: r122940
Diffstat (limited to 'libgfortran/io')
-rw-r--r--libgfortran/io/transfer.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c
index 42f8249..2c1558e 100644
--- a/libgfortran/io/transfer.c
+++ b/libgfortran/io/transfer.c
@@ -1155,7 +1155,7 @@ formatted_transfer_scalar (st_parameter_dt *dtp, bt type, void *p, int len,
/* Format codes that don't transfer data. */
case FMT_X:
case FMT_TR:
- consume_data_flag = 0 ;
+ consume_data_flag = 0;
pos = bytes_used + f->u.n + dtp->u.p.skips;
dtp->u.p.skips = f->u.n + dtp->u.p.skips;
@@ -1171,6 +1171,7 @@ formatted_transfer_scalar (st_parameter_dt *dtp, bt type, void *p, int len,
write_x (dtp, dtp->u.p.skips, dtp->u.p.pending_spaces);
dtp->u.p.skips = dtp->u.p.pending_spaces = 0;
}
+
if (dtp->u.p.mode == READING)
read_x (dtp, f->u.n);
@@ -1178,6 +1179,8 @@ formatted_transfer_scalar (st_parameter_dt *dtp, bt type, void *p, int len,
case FMT_TL:
case FMT_T:
+ consume_data_flag = 0;
+
if (f->format == FMT_TL)
{
@@ -1196,8 +1199,10 @@ formatted_transfer_scalar (st_parameter_dt *dtp, bt type, void *p, int len,
}
else /* FMT_T */
{
- consume_data_flag = 0;
- pos = f->u.n - 1;
+ if (dtp->u.p.mode == READING)
+ pos = f->u.n - 1;
+ else
+ pos = f->u.n - dtp->u.p.pending_spaces - 1;
}
/* Standard 10.6.1.1: excessive left tabbing is reset to the