diff mbox series

PR fortran/88169 -- remove error condition/message

Message ID 20181221221320.GA14405@troutmask.apl.washington.edu
State New
Headers show
Series PR fortran/88169 -- remove error condition/message | expand

Commit Message

Steve Kargl Dec. 21, 2018, 10:13 p.m. UTC
The attached patch addresses an issue submitted by Neil
Carlson.  He and I have an exchange in the PR's audit
trail hashing out the validity of his code example.  I 
also asked on the J3 mailing about the his code.  It seems
that language of the Fortran standard may have been 
misinterpreted when the gfortran code was committed.  See
the PR for more information.

The patch has been tested on x86_64-*-freebsd.  OK to commit?

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.

Comments

Thomas Koenig Dec. 22, 2018, 1:41 p.m. UTC | #1
Hi Steve,

> The attached patch addresses an issue submitted by Neil
> Carlson.  He and I have an exchange in the PR's audit
> trail hashing out the validity of his code example.  I
> also asked on the J3 mailing about the his code.  It seems
> that language of the Fortran standard may have been
> misinterpreted when the gfortran code was committed.  See
> the PR for more information.
> 
> The patch has been tested on x86_64-*-freebsd.  OK to commit?

OK.

Thanks for the patch!

Regards

	Thomas
diff mbox series

Patch

Index: gcc/fortran/module.c
===================================================================
--- gcc/fortran/module.c	(revision 267342)
+++ gcc/fortran/module.c	(working copy)
@@ -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: gcc/testsuite/gfortran.dg/pr88169_1.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr88169_1.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr88169_1.f90	(working copy)
@@ -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" } }
Index: gcc/testsuite/gfortran.dg/pr88169_2.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr88169_2.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr88169_2.f90	(working copy)
@@ -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
Index: gcc/testsuite/gfortran.dg/pr88169_3.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr88169_3.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr88169_3.f90	(working copy)
@@ -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" } }