aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/module.c12
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gfortran.dg/pr88169_1.f9021
-rw-r--r--gcc/testsuite/gfortran.dg/pr88169_2.f9031
-rw-r--r--gcc/testsuite/gfortran.dg/pr88169_3.f9015
6 files changed, 80 insertions, 12 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index e960cc7..6f37f09 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2018-12-22 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/88169
+ * module.c (mio_namelist): Remove an error condition/message that
+ is contrary to the Fortran standard.
+
2018-12-22 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/85544
diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index d42ab47..163b3ce 100644
--- a/gcc/fortran/module.c
+++ b/gcc/fortran/module.c
@@ -3711,7 +3711,6 @@ static void
mio_namelist (gfc_symbol *sym)
{
gfc_namelist *n, *m;
- const char *check_name;
mio_lparen ();
@@ -3722,17 +3721,6 @@ mio_namelist (gfc_symbol *sym)
}
else
{
- /* This departure from the standard is flagged as an error.
- It does, in fact, work correctly. TODO: Allow it
- conditionally? */
- if (sym->attr.flavor == FL_NAMELIST)
- {
- check_name = find_use_name (sym->name, false);
- if (check_name && strcmp (check_name, sym->name) != 0)
- gfc_error ("Namelist %s cannot be renamed by USE "
- "association to %s", sym->name, check_name);
- }
-
m = NULL;
while (peek_atom () != ATOM_RPAREN)
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1dd460a..d358d2d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,12 @@
2018-12-21 Steven G. Kargl <kargl@gcc.gnu.org>
+ PR fortran/88169
+ * gfortran.dg/pr88169_1.f90: new test.
+ * gfortran.dg/pr88169_2.f90: Ditto.
+ * gfortran.dg/pr88169_3.f90: Ditto.
+
+2018-12-21 Steven G. Kargl <kargl@gcc.gnu.org>
+
PR fortran/69121
* gfortran.dg/ieee/ieee_9.f90: New test.
diff --git a/gcc/testsuite/gfortran.dg/pr88169_1.f90 b/gcc/testsuite/gfortran.dg/pr88169_1.f90
new file mode 100644
index 0000000..6ea4aba
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr88169_1.f90
@@ -0,0 +1,21 @@
+! { dg-do run }
+module foo_nml
+ implicit none
+ real :: x = -1
+ namelist /foo/ x
+end module
+
+program main
+ use foo_nml, only: bar => foo, x
+ implicit none
+ integer fd
+ x = 42
+ open(newunit=fd, file='tmp.dat', status='replace')
+ write(fd,nml=bar)
+ close(fd)
+ open(newunit=fd, file='tmp.dat', status='old')
+ read(fd,nml=bar)
+ if (x /= 42) stop 1
+ close(fd)
+end program
+! { dg-final { cleanup-modules "foo_nml" } }
diff --git a/gcc/testsuite/gfortran.dg/pr88169_2.f90 b/gcc/testsuite/gfortran.dg/pr88169_2.f90
new file mode 100644
index 0000000..a7805b4
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr88169_2.f90
@@ -0,0 +1,31 @@
+! { dg-do run }
+module foo_nml
+ implicit none
+ real :: x = -1
+ namelist /foo/ x
+end module
+!
+! Yes, implicit typing of local variable 'x'.
+!
+program main
+ use foo_nml, only: bar => foo
+ integer fd
+ x = 42
+ open(newunit=fd, file='tmp.dat', status='replace')
+ write(fd,nml=bar)
+ close(fd)
+ open(newunit=fd, file='tmp.dat', status='old')
+ read(fd,nml=bar)
+ close(fd)
+ call bah
+ if (x /= 42) stop 1
+end program
+
+subroutine bah
+ use foo_nml
+ integer fd
+ open(newunit=fd, file='tmp.dat', status='old')
+ read(fd,nml=foo)
+ if (x /= -1) stop 2
+ close(fd, status='delete')
+end subroutine bah
diff --git a/gcc/testsuite/gfortran.dg/pr88169_3.f90 b/gcc/testsuite/gfortran.dg/pr88169_3.f90
new file mode 100644
index 0000000..6bc24ed
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr88169_3.f90
@@ -0,0 +1,15 @@
+! { dg-do compile }
+! { dg-options "-std=f95" }
+module foo_nml
+ implicit none
+ real :: x = -1
+ namelist /foo/ x
+end module
+
+program main
+ use foo_nml, only: bar => foo, x
+ implicit none
+ real a
+ namelist /bar/a ! { dg-error "already is USE associated" }
+end program
+! { dg-final { cleanup-modules "foo_nml" } }