summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/io.c7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/comma_format_extension_1.f11
-rw-r--r--gcc/testsuite/gfortran.dg/comma_format_extension_2.f10
-rw-r--r--gcc/testsuite/gfortran.dg/comma_format_extension_3.f16
-rw-r--r--gcc/testsuite/gfortran.dg/comma_format_extension_4.f10
-rw-r--r--libgfortran/ChangeLog6
-rw-r--r--libgfortran/io/format.c5
9 files changed, 72 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 95e2cee227a..5912cd6d1db 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -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
diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c
index 12650f90f24..90eb855016d 100644
--- a/gcc/fortran/io.c
+++ b/gcc/fortran/io.c
@@ -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:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0cee677a70e..63ea6a80ca4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 00000000000..a3a5a98f155
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/comma_format_extension_1.f
@@ -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
index 00000000000..7eb17b58434
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/comma_format_extension_2.f
@@ -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
index 00000000000..15ee18905c4
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/comma_format_extension_3.f
@@ -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
index 00000000000..5f6ecc5073b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/comma_format_extension_4.f
@@ -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
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index 51959122810..9399d731fce 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -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
diff --git a/libgfortran/io/format.c b/libgfortran/io/format.c
index f8d858af7a7..5c2d999cbd2 100644
--- a/libgfortran/io/format.c
+++ b/libgfortran/io/format.c
@@ -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