OSDN Git Service

2009-08-24 Jerry DeLisle <jvdelisle@gcc.gnu.org>
authorjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 25 Aug 2009 05:22:14 +0000 (05:22 +0000)
committerjvdelisle <jvdelisle@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 25 Aug 2009 05:22:14 +0000 (05:22 +0000)
PR fortran/41162
* io.c (check_format): Fix to not error on slash after P. Fix some
error loci.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@151074 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 330ced8..15881c9 100644 (file)
@@ -1,5 +1,11 @@
 2009-08-24  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
+       PR fortran/41162
+       * io.c (check_format): Fix to not error on slash after P. Fix some
+       error loci.
+       
+2009-08-24  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
        PR fortran/41154
        * io.c (check_format): Fix to not error on right paren after P.
 
index 239d1e2..a0a4356 100644 (file)
@@ -694,7 +694,7 @@ data_desc:
        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 && t != FMT_RPAREN)
+         && t != FMT_D && t != FMT_G && t != FMT_RPAREN && t != FMT_SLASH)
        {
          error = _("Comma required after P descriptor");
          goto syntax;
@@ -708,7 +708,7 @@ data_desc:
                goto fail;
            }
           if (t != FMT_F && t != FMT_E && t != FMT_EN && t != FMT_ES && t != FMT_D
-             && t != FMT_G && t != FMT_RPAREN)
+             && t != FMT_G && t != FMT_RPAREN && t != FMT_SLASH)
            {
              error = _("Comma required after P descriptor");
              goto syntax;
@@ -839,6 +839,9 @@ data_desc:
            gfc_warning ("Period required in format "
                         "specifier %s at %L", token_to_string (t),
                          &format_locus);
+         /* If we go to finished, we need to unwind this
+            before the next round.  */
+         format_locus.nextc -= format_string_pos;
          saved_token = u;
          break;
        }
@@ -1009,6 +1012,10 @@ between_desc:
       if (gfc_notify_std (GFC_STD_GNU, "Extension: Missing comma at %L",
          &format_locus) == FAILURE)
        return FAILURE;
+      /* If we do not actually return a failure, we need to unwind this
+         before the next round.  */
+      if (mode != MODE_FORMAT)
+       format_locus.nextc -= format_string_pos;
       goto format_item_1;
     }
 
@@ -1068,6 +1075,10 @@ extension_optional_comma:
       if (gfc_notify_std (GFC_STD_GNU, "Extension: Missing comma at %L",
          &format_locus) == FAILURE)
        return FAILURE;
+      /* If we do not actually return a failure, we need to unwind this
+         before the next round.  */
+      if (mode != MODE_FORMAT)
+       format_locus.nextc -= format_string_pos;
       saved_token = t;
       break;
     }