diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2007-05-23 02:24:31 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2007-05-23 02:24:31 +0000 |
commit | f806b30fd9f74ae4e4e07dfa9a5a44e281a6a3d4 (patch) | |
tree | e90e01b8e853007bbcabba27fdb005b47abd0ca3 /libgfortran | |
parent | 6913158b1abb426320778b9c536878ab9f3abfb8 (diff) |
re PR fortran/31051 ([4.2 Only] gfortran bug with x and t format descriptors.)
2007-05-22 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/31051
Backport from trunk.
* io/transfer.c (formatted_transfer_scalar): Adjust position for pending
spaces when in writing mode. Clean up some formatting.
From-SVN: r124977
Diffstat (limited to 'libgfortran')
-rw-r--r-- | libgfortran/ChangeLog | 9 | ||||
-rw-r--r-- | libgfortran/io/transfer.c | 11 |
2 files changed, 16 insertions, 4 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 5db3fac73f9..6b28568c912 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,10 @@ +2007-05-22 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR libfortran/31051 + Backport from trunk. + * io/transfer.c (formatted_transfer_scalar): Adjust position for pending + spaces when in writing mode. Clean up some formatting. + 2007-05-22 Tobias Burnus <burnus@net-b.de> PR libfortran/31915 @@ -8,8 +15,8 @@ 2007-05-20 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/31395 - * io/format.c (parse_format_list): Fix parsing. Regression against g77. Backport from 4.3. + * io/format.c (parse_format_list): Fix parsing. Regression against g77. 2007-05-20 Thomas Koenig <tkoenig@gcc.gnu.org> diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index 202089b3c8f..d1cd01c7745 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -1152,7 +1152,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; @@ -1168,6 +1168,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); @@ -1175,6 +1176,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) { @@ -1193,8 +1196,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 |