aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2005-08-14 16:15:40 +0000
committerPaul Thomas <pault@gcc.gnu.org>2005-08-14 16:15:40 +0000
commit7af8f00c543646474396940a162866e60bf350de (patch)
treeac2f22c51d35dc9fa5d7732e086d66a7d40f0e8e
parentadb7b76436a93a635cb93e72ec6e701f4b10d6f5 (diff)
downloadgcc-7af8f00c543646474396940a162866e60bf350de.zip
gcc-7af8f00c543646474396940a162866e60bf350de.tar.gz
gcc-7af8f00c543646474396940a162866e60bf350de.tar.bz2
re PR fortran/21432 (gfortran does not support printing of namelists)
2005-08-14 Paul Thomas <pault@gcc.gnu.org> PR fortran/21432. * io.c (match_io): Add code to implement PRINT namelist. 2005-08-14 Paul Thomas <pault@gcc.gnu.org> PR fortran/21432. * gfortran.dg/namelist_print_1.f: New test of functionality of PRINT namelist. * gfortran.dg/namelist_print_2.f: New test to check that PRINT namelist generates error with -std=f95. From-SVN: r103079
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/io.c24
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/gfortran.dg/namelist_print_1.f13
-rw-r--r--gcc/testsuite/gfortran.dg/namelist_print_2.f13
5 files changed, 63 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 158123a..152ab00 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2005-08-14 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/21432.
+ * io.c (match_io): Add code to implement PRINT namelist.
+
2005-08-14 Canqun Yang <canqun@nudt.edu.cn>
* trans-stmt.c (gfc_trans_arithmetic_if): Optimized in case of equal
diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c
index 78899aa..5b27ead 100644
--- a/gcc/fortran/io.c
+++ b/gcc/fortran/io.c
@@ -2133,6 +2133,30 @@ match_io (io_kind k)
if (gfc_match_char ('(') == MATCH_NO)
{
+ /* Treat the non-standard case of PRINT namelist. */
+ if (k == M_PRINT && (gfc_match_name (name) == MATCH_YES)
+ && !gfc_find_symbol (name, NULL, 1, &sym)
+ && (sym->attr.flavor == FL_NAMELIST))
+ {
+ if (gfc_notify_std (GFC_STD_GNU, "PRINT namelist at "
+ "%C is an extension") == FAILURE)
+ {
+ m = MATCH_ERROR;
+ goto cleanup;
+ }
+ if (gfc_match_eos () == MATCH_NO)
+ {
+ gfc_error ("Namelist followed by I/O list at %C");
+ m = MATCH_ERROR;
+ goto cleanup;
+ }
+
+ dt->io_unit = default_unit (k);
+ dt->namelist = sym;
+ goto get_io_list;
+ }
+
+
if (k == M_WRITE)
goto syntax;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 482d196..b11e726 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2005-08-14 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/21432.
+ * gfortran.dg/namelist_print_1.f: New test of functionality of
+ PRINT namelist.
+ * gfortran.dg/namelist_print_2.f: New test to check that PRINT
+ namelist generates error with -std=f95.
+
2005-08-14 Ira Rosen <irar@il.ibm.com>
PR tree-optimization/23119
diff --git a/gcc/testsuite/gfortran.dg/namelist_print_1.f b/gcc/testsuite/gfortran.dg/namelist_print_1.f
new file mode 100644
index 0000000..dfd2841
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/namelist_print_1.f
@@ -0,0 +1,13 @@
+! Test Non standard PRINT namelist - PR21432
+!
+! Contributor Paul Thomas <pault@gcc.gnu.org>
+!
+! { dg-do run }
+! { dg-options "-std=gnu" }
+
+ real x
+ namelist /mynml/ x
+ x = 1
+! ( dg-output "^" }
+ print mynml ! { dg-output "&MYNML(\n|\r\n|\r) X= 1.000000 , /(\n|\r\n|\r)" }
+ end
diff --git a/gcc/testsuite/gfortran.dg/namelist_print_2.f b/gcc/testsuite/gfortran.dg/namelist_print_2.f
new file mode 100644
index 0000000..c37e359
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/namelist_print_2.f
@@ -0,0 +1,13 @@
+! Test Non standard PRINT namelist - PR21432 is
+! not accepted by -std=f95
+!
+! Contributor Paul Thomas <pault@gcc.gnu.org>
+!
+! { dg-do compile }
+! { dg-options "-std=f95" }
+!
+ real x
+ namelist /mynml/ x
+ x = 1
+ print mynml ! { dg-error "PRINT namelist.*extension" "" }
+ end