Commit c9330b03 by Francois-Xavier Coudert Committed by François-Xavier Coudert

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
parent 12bcc2c1
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;
......
......@@ -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;
}
......
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.
......
......@@ -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:
......
......@@ -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;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment