From: Jerry DeLisle Date: Mon, 24 Aug 2009 04:41:51 +0000 (+0000) Subject: re PR fortran/35754 (-std=f95: Reject "1P2E12.4" w/o a comma after the "P") X-Git-Tag: releases/gcc-4.5.0~3879 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e523d8bcf768ba210681f90cc2983f03f1b4d983;p=thirdparty%2Fgcc.git re PR fortran/35754 (-std=f95: Reject "1P2E12.4" w/o a comma after the "P") 2009-08-23 Jerry DeLisle PR fortran/35754 * io.c (check_format): Add checks for comma and the allowed format specifiers after the 'P' specifier. Fix typo in error message and adjust locus. From-SVN: r151045 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 1ac306615d71..a5e5b446f547 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2009-08-23 Jerry DeLisle + + PR fortran/35754 + * io.c (check_format): Add checks for comma and the allowed + format specifiers after the 'P' specifier. Fix typo in error message + and adjust locus. + 2009-08-23 Jerry DeLisle PR fortran/37446 diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index 456a38c67bb1..7191a58382ec 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -687,20 +687,35 @@ data_desc: break; case FMT_P: - if (pedantic) + /* Comma after P is allowed only for F, E, EN, ES, D, or G. + 10.1.1 (1). */ + t = format_lex (); + if (t == FMT_ERROR) + goto fail; + if (gfc_option.allow_std < GFC_STD_F2003 && t != FMT_COMMA + && t != FMT_F && t != FMT_E && t != FMT_EN && t != FMT_ES + && t != FMT_D && t != FMT_G) + { + error = _("Comma required after P descriptor"); + goto syntax; + } + if (t != FMT_COMMA) { - t = format_lex (); - if (t == FMT_ERROR) - goto fail; if (t == FMT_POSINT) { - error = _("Repeat count cannot follow P descriptor"); + t = format_lex (); + if (t == FMT_ERROR) + goto fail; + } + if (t != FMT_F && t != FMT_E && t != FMT_EN && t != FMT_ES && t != FMT_D + && t != FMT_G) + { + error = _("Comma required after P descriptor"); goto syntax; } - - saved_token = t; } + saved_token = t; goto optional_comma; case FMT_T: @@ -883,13 +898,13 @@ data_desc: if (t != FMT_PERIOD) { /* Warn if -std=legacy, otherwise error. */ - if (mode != MODE_FORMAT) - format_locus.nextc += format_string_pos; if (gfc_option.warn_std != 0) { - error = _("Period required in format specifier at %L"); + error = _("Period required in format specifier"); goto syntax; } + if (mode != MODE_FORMAT) + format_locus.nextc += format_string_pos; gfc_warning ("Period required in format specifier at %L", &format_locus); saved_token = t;