re PR fortran/13257 ([4.0 only] Error instead of warning for missing comma in format...
authorAndrew Pinski <pinskia@physics.uc.edu>
Sat, 9 Apr 2005 18:44:07 +0000 (18:44 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Sat, 9 Apr 2005 18:44:07 +0000 (11:44 -0700)
PR fortran/13257

fortran/ChangeLog:
* io.c (check_format): Allow an optional comma
between descriptors.

libgfortran/ChangeLog:
* format.c (parse_format_list): Allow an optional comma
between descriptors.

testsuite/ChangeLog:
* comma_format_extension_[1234].f: New tests.

From-SVN: r97919

gcc/fortran/ChangeLog
gcc/fortran/io.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/comma_format_extension_1.f [new file with mode: 0644]
gcc/testsuite/gfortran.dg/comma_format_extension_2.f [new file with mode: 0644]
gcc/testsuite/gfortran.dg/comma_format_extension_3.f [new file with mode: 0644]
gcc/testsuite/gfortran.dg/comma_format_extension_4.f [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/io/format.c

index 95e2cee..5912cd6 100644 (file)
@@ -1,3 +1,9 @@
+2005-04-09  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       PR fortran/13257
+       * io.c (check_format): Allow an optional comma
+       between descriptors.
+
 2005-04-09  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
 
        * match.c (match_arithmetic_if): Remove gfc_ prefix and correct
index 12650f9..90eb855 100644 (file)
@@ -433,6 +433,7 @@ check_format (void)
 format_item:
   /* In this state, the next thing has to be a format item.  */
   t = format_lex ();
+format_item_1:
   switch (t)
     {
     case FMT_POSINT:
@@ -701,8 +702,10 @@ between_desc:
       goto syntax;
 
     default:
-      error = "Missing comma";
-      goto syntax;
+      if (gfc_notify_std (GFC_STD_GNU, "Extension: Missing comma at %C")
+         == FAILURE)
+       return FAILURE;
+      goto format_item_1;
     }
 
 optional_comma:
index 0cee677..63ea6a8 100644 (file)
@@ -1,3 +1,8 @@
+2005-04-09  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       PR fortran/13257
+       * comma_format_extension_[1234].f: New tests.
+
 2005-04-09  Jakub Jelinek  <jakub@redhat.com>
 
        * gcc.dg/tree-ssa/stdarg-1.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/comma_format_extension_1.f b/gcc/testsuite/gfortran.dg/comma_format_extension_1.f
new file mode 100644 (file)
index 0000000..a3a5a98
--- /dev/null
@@ -0,0 +1,11 @@
+! { dg-do compile }
+! { dg-options "" }
+! test that the extension for a missing comma is accepted
+
+      subroutine mysub
+      dimension ibar(5)
+      write (3,1001) ( ibar(m), m = 1, 5 )
+
+ 1001 format (/5x,' ',i4' '/ )
+      return
+      end
diff --git a/gcc/testsuite/gfortran.dg/comma_format_extension_2.f b/gcc/testsuite/gfortran.dg/comma_format_extension_2.f
new file mode 100644 (file)
index 0000000..7eb17b5
--- /dev/null
@@ -0,0 +1,10 @@
+! { dg-do compile }
+! test that the extension for a missing comma is accepted
+
+      subroutine mysub
+      dimension ibar(5)
+      write (3,1001) ( ibar(m), m = 1, 5 )
+
+ 1001 format (/5x,' ',i4' '/ ) ! { dg-warning "Missing comma" }
+      return
+      end
diff --git a/gcc/testsuite/gfortran.dg/comma_format_extension_3.f b/gcc/testsuite/gfortran.dg/comma_format_extension_3.f
new file mode 100644 (file)
index 0000000..15ee189
--- /dev/null
@@ -0,0 +1,16 @@
+! PR libfortran/15332 and PR fortran/13257
+! We used to accept this as an extension but
+! did do the correct thing at runtime.
+! Note the missing , before i1 in the format.
+! { do-do run }
+! { dg-options "" }
+      character*12 c
+
+      write (c,100) 0, 1
+      if (c .ne. 'i = 0, j = 1') call abort
+      
+      write (c,100) 0
+      if (c .ne. 'i = 0       ') call abort
+
+ 100  format ('i = 'i1,:,', j = ',i1)
+      end
diff --git a/gcc/testsuite/gfortran.dg/comma_format_extension_4.f b/gcc/testsuite/gfortran.dg/comma_format_extension_4.f
new file mode 100644 (file)
index 0000000..5f6ecc5
--- /dev/null
@@ -0,0 +1,10 @@
+! PR fortran/13257
+! Note the missing , before i1 in the format.
+! { do-do run }
+! { dg-options "" }
+      character*5 c
+      write (c,1001) 1
+      if (c .ne. '    1 ') call abort
+
+ 1001 format (' ',i4' ')
+      end
index 5195912..9399d73 100644 (file)
@@ -1,3 +1,9 @@
+2005-04-09  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       PR fortran/13257
+       * format.c (parse_format_list): Allow an optional comma
+       between descriptors.
+
 2005-04-08  Eric Botcazou  <ebotcazou@libertysurf.fr>
 
        * io/backspace.c (unformatted_backspace): Do not dereference
index f8d858a..5c2d999 100644 (file)
@@ -452,6 +452,7 @@ parse_format_list (void)
   /* Get the next format item */
  format_item:
   t = format_lex ();
+ format_item_1:
   switch (t)
     {
     case FMT_POSINT:
@@ -853,8 +854,8 @@ parse_format_list (void)
       goto finished;
 
     default:
-      error = "Missing comma in format";
-      goto finished;
+      /* Assume a missing comma, this is a GNU extension */
+      goto format_item_1;
     }
 
   /* Optional comma is a weird between state where we've just finished