Commit d8c00a20 by Jerry DeLisle

re PR fortran/38439 (I/O PD edit descriptor inconsistency)

2009-10-11  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR libgfortran/38439
	* io/format.c (parse_format_list): Add check for tokens not allowed
	after P specifier. Fix comments.  Remove un-needed code. Fix the
	default exponent list. Correct pointer assignment error.

From-SVN: r152644
parent 652a8c1c
2009-10-11 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/38439
* io/format.c (parse_format_list): Add check for tokens not allowed
after P specifier. Fix comments. Remove un-needed code. Fix the
default exponent list. Correct pointer assignment error.
2009-10-05 Jerry DeLisle <jvdelisle@gcc.gnu.org> 2009-10-05 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/35862 PR libgfortran/35862
......
...@@ -706,6 +706,12 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok) ...@@ -706,6 +706,12 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok)
goto data_desc; goto data_desc;
} }
if (t != FMT_COMMA && t != FMT_RPAREN && t != FMT_SLASH)
{
fmt->error = "Comma required after P descriptor";
goto finished;
}
fmt->saved_token = t; fmt->saved_token = t;
goto optional_comma; goto optional_comma;
...@@ -734,7 +740,7 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok) ...@@ -734,7 +740,7 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok)
goto between_desc; goto between_desc;
case FMT_STRING: case FMT_STRING:
/* TODO: Find out why is is necessary to turn off format caching. */ /* TODO: Find out why it is necessary to turn off format caching. */
saveit = false; saveit = false;
get_fnode (fmt, &head, &tail, FMT_STRING); get_fnode (fmt, &head, &tail, FMT_STRING);
tail->u.string.p = fmt->string; tail->u.string.p = fmt->string;
...@@ -851,19 +857,6 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok) ...@@ -851,19 +857,6 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok)
data_desc: data_desc:
switch (t) switch (t)
{ {
case FMT_P:
t = format_lex (fmt);
if (t == FMT_POSINT)
{
fmt->error = "Repeat count cannot follow P descriptor";
goto finished;
}
fmt->saved_token = t;
get_fnode (fmt, &head, &tail, FMT_P);
goto optional_comma;
case FMT_L: case FMT_L:
t = format_lex (fmt); t = format_lex (fmt);
if (t != FMT_POSINT) if (t != FMT_POSINT)
...@@ -971,6 +964,7 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok) ...@@ -971,6 +964,7 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok)
} }
fmt->saved_token = t; fmt->saved_token = t;
tail->u.real.d = 0; tail->u.real.d = 0;
tail->u.real.e = -1;
break; break;
} }
...@@ -982,11 +976,11 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok) ...@@ -982,11 +976,11 @@ parse_format_list (st_parameter_dt *dtp, bool *save_ok)
} }
tail->u.real.d = fmt->value; tail->u.real.d = fmt->value;
tail->u.real.e = -1;
if (t == FMT_D || t == FMT_F) if (t2 == FMT_D || t2 == FMT_F)
break; break;
tail->u.real.e = -1;
/* Look for optional exponent */ /* Look for optional exponent */
t = format_lex (fmt); t = format_lex (fmt);
......
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