]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/35754 (-std=f95: Reject "1P2E12.4" w/o a comma after the "P")
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Mon, 24 Aug 2009 04:41:51 +0000 (04:41 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Mon, 24 Aug 2009 04:41:51 +0000 (04:41 +0000)
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

gcc/fortran/ChangeLog
gcc/fortran/io.c

index 1ac306615d717a6e8ea7f3c0abdf96f497d26354..a5e5b446f547a35c0bb7f0ecc048872e989adf7a 100644 (file)
@@ -1,3 +1,10 @@
+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
index 456a38c67bb1ab86882626e8742259adaa733c88..7191a58382ec9f82760b4a345f0a3f24bd7945a0 100644 (file)
@@ -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;