re PR fortran/88169 (Rejects USE rename of namelist group)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Sat, 22 Dec 2018 17:26:12 +0000 (17:26 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Sat, 22 Dec 2018 17:26:12 +0000 (17:26 +0000)
2018-12-21  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-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.

From-SVN: r267351

gcc/fortran/ChangeLog
gcc/fortran/module.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr88169_1.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr88169_2.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/pr88169_3.f90 [new file with mode: 0644]

index e960cc7..6f37f09 100644 (file)
@@ -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
index d42ab47..163b3ce 100644 (file)
@@ -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)
        {
index 1dd460a..d358d2d 100644 (file)
@@ -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 (file)
index 0000000..6ea4aba
--- /dev/null
@@ -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 (file)
index 0000000..a7805b4
--- /dev/null
@@ -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 (file)
index 0000000..6bc24ed
--- /dev/null
@@ -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" } }