diff options
author | Francois-Xavier Coudert <coudert@clipper.ens.fr> | 2005-05-29 14:22:49 +0200 |
---|---|---|
committer | François-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2005-05-29 12:22:49 +0000 |
commit | c9330b0331b05cb271bc9a18970d10894b370765 (patch) | |
tree | d80d5771a74496d12a3ce051f6bbac51455b8a76 | |
parent | 12bcc2c1d5754920bd84fd94425501264be56503 (diff) | |
download | gcc-c9330b0331b05cb271bc9a18970d10894b370765.zip gcc-c9330b0331b05cb271bc9a18970d10894b370765.tar.gz gcc-c9330b0331b05cb271bc9a18970d10894b370765.tar.bz2 |
re PR libfortran/20006 ($ format extension doesn't work)
PR libfortran/20006
* io.c (format_item_1): Add check and extension warning for
$ edit descriptor.
* io/format.c (parse_format_list): Set repeat count of $ format
node to 1.
* io/transfer.c (read_sf): Add g.seen_dollar to the test
concerning advancing I/O.
(data_transfer_init): Likewise.
(finalize_transfer): Likewise.
From-SVN: r100314
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/io.c | 6 | ||||
-rw-r--r-- | libgfortran/ChangeLog | 10 | ||||
-rw-r--r-- | libgfortran/io/format.c | 1 | ||||
-rw-r--r-- | libgfortran/io/transfer.c | 7 |
5 files changed, 26 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 097ef92..b10aea28 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2005-05-29 Francois-Xavier Coudert <coudert@clipper.ens.fr> + + PR libfortran/20006 + * io.c (format_item_1): Add check and extension warning for + $ edit descriptor. + 2005-05-28 Steven G. Kargl <kargls@comcast.net> * arith.c (gfc_arith_init_1): Fix off by one problem; diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index 8dab5f5..5fae9a2d 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -491,9 +491,13 @@ format_item_1: case FMT_DOLLAR: t = format_lex (); + + if (gfc_notify_std (GFC_STD_GNU, "Extension: $ descriptor at %C") + == FAILURE) + return FAILURE; if (t != FMT_RPAREN || level > 0) { - error = "$ must the last specifier"; + error = "$ must be the last specifier"; goto syntax; } diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index f3bb715..e816c31 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,13 @@ +2005-05-29 Francois-Xavier Coudert <coudert@clipper.ens.fr> + + PR libfortran/20006 + * io/format.c (parse_format_list): Set repeat count of $ format + node to 1. + * io/transfer.c (read_sf): Add g.seen_dollar to the test + concerning advancing I/O. + (data_transfer_init): Likewise. + (finalize_transfer): Likewise. + 2005-05-27 Thomas Koenig <Thomas.Koenig@online.de> * runtime/in_pack_generic.c: Adjust copyright years. diff --git a/libgfortran/io/format.c b/libgfortran/io/format.c index 413a664..229a937 100644 --- a/libgfortran/io/format.c +++ b/libgfortran/io/format.c @@ -579,6 +579,7 @@ parse_format_list (void) case FMT_DOLLAR: get_fnode (&head, &tail, FMT_DOLLAR); + tail->repeat = 1; goto between_desc; case FMT_T: diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index b51da52..46bec83 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -191,7 +191,7 @@ read_sf (int *length) /* If we see an EOR during non-advancing I/O, we need to skip the rest of the I/O statement. Set the corresponding flag. */ - if (advance_status == ADVANCE_NO) + if (advance_status == ADVANCE_NO || g.seen_dollar) eor_condition = 1; /* Without padding, terminate the I/O statement without assigning @@ -1187,7 +1187,7 @@ data_transfer_init (int read_flag) } else { - if (advance_status == ADVANCE_YES) + if (advance_status == ADVANCE_YES && !g.seen_dollar) current_unit->read_bad = 1; } @@ -1459,11 +1459,12 @@ finalize_transfer (void) { free_fnodes (); - if (advance_status == ADVANCE_NO) + if (advance_status == ADVANCE_NO || g.seen_dollar) { /* Most systems buffer lines, so force the partial record to be written out. */ flush (current_unit->s); + g.seen_dollar = 0; return; } |