aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancois-Xavier Coudert <coudert@clipper.ens.fr>2005-05-29 14:22:49 +0200
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>2005-05-29 12:22:49 +0000
commitc9330b0331b05cb271bc9a18970d10894b370765 (patch)
treed80d5771a74496d12a3ce051f6bbac51455b8a76
parent12bcc2c1d5754920bd84fd94425501264be56503 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/fortran/io.c6
-rw-r--r--libgfortran/ChangeLog10
-rw-r--r--libgfortran/io/format.c1
-rw-r--r--libgfortran/io/transfer.c7
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;
}