aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2009-08-24 04:41:51 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2009-08-24 04:41:51 +0000
commite523d8bcf768ba210681f90cc2983f03f1b4d983 (patch)
treeed19f806cfbcfe9ab1cffa240a3553922607d012 /gcc/fortran
parenta14e5b7e0e7ed93f3be7fde973f5ee7ab0225cc4 (diff)
downloadgcc-e523d8bcf768ba210681f90cc2983f03f1b4d983.zip
gcc-e523d8bcf768ba210681f90cc2983f03f1b4d983.tar.gz
gcc-e523d8bcf768ba210681f90cc2983f03f1b4d983.tar.bz2
re PR fortran/35754 (-std=f95: Reject "1P2E12.4" w/o a comma after the "P")
2009-08-23 Jerry DeLisle <jvdelisle@gcc.gnu.org> 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
Diffstat (limited to 'gcc/fortran')
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/io.c35
2 files changed, 32 insertions, 10 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 1ac3066..a5e5b44 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,12 @@
2009-08-23 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+ 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 <jvdelisle@gcc.gnu.org>
+
PR fortran/37446
* io.c (enum format_token): Change FMT_EXT to FMT_EN and FMT_ES.
(format_lex): Likewise.
diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c
index 456a38c..7191a58 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;