Patchwork [Fortran] PR

login
register
mail settings
Submitter Tobias Burnus
Date July 17, 2011, 6:30 p.m.
Message ID <4E232A5D.4030902@net-b.de>
Download mbox | patch
Permalink /patch/105078/
State New
Headers show

Comments

Tobias Burnus - July 17, 2011, 6:30 p.m.
First, I have another pending patch, cf:
http://gcc.gnu.org/ml/fortran/2011-07/msg00142.html

The attached patch adds diagnostic in the case that a use-associated 
symbol is the same as the current procedure/module name. Besides typos, 
that either indicates the use of the wrong procedure (which is already 
diagnosed - "ambiguous") - or the import of an INTERFACE for the 
procedure which is just being implemented - all is invalid.

Build and regtested on x86-64-linux?
OK for the trunk?

Actually, I am not 100% sure whether I need approval as Thomas already 
gave kind of an approval in the PR. Thus, if I don't hear a nay or yea, 
I will commit it tomorrow as approved/obvious.

Tobias
Thomas Koenig - July 17, 2011, 7:09 p.m.
Am 17.07.2011 20:30, schrieb Tobias Burnus:
> Build and regtested on x86-64-linux?

If you say so :-)

> OK for the trunk?
>
> Actually, I am not 100% sure whether I need approval as Thomas already
> gave kind of an approval in the PR.

Well, to remove any doubt: Yes.

Thanks for the patch!

	Thomas
Tobias Burnus - July 17, 2011, 8:21 p.m.
Thomas Koenig:
> Am 17.07.2011 20:30, schrieb Tobias Burnus:
>> Build and regtested on x86-64-linux?
>
> If you say so :-)

Well, I thought you had tested the patch :-)

(I had also regtested it successfully. By the way the "?" and the 
incomplete subject shows that one shouldn't click on "sent" while being 
on the phone.)

>> OK for the trunk?
> Well, to remove any doubt: Yes.

Committed as Rev. 176375

Tobias

Patch

2011-07-17  Tobias Burnus  <burnus@net-b.de>

	PR fortran/34657
	* module.c (check_for_ambiguous): Check whether the name is matches
	the current program unit.

2011-07-17  Tobias Burnus  <burnus@net-b.de>
	    Thomas Koenig  <tkoenig@gcc.gnu.org>

	PR fortran/34657
 	* gfortran.dg/generic_17.f90: Fix testcase.
	* gfortran.dg/interface_3.f90: Add dg-error.
	* gfortran.dg/use_14.f90: New.
	* gfortran.dg/use_15.f90: New.

diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c
index 4afe467..b62ad8d 100644
--- a/gcc/fortran/module.c
+++ b/gcc/fortran/module.c
@@ -4278,6 +4278,13 @@  check_for_ambiguous (gfc_symbol *st_sym, pointer_info *info)
   module_locus locus;
   symbol_attribute attr;
 
+  if (st_sym->ns->proc_name && st_sym->name == st_sym->ns->proc_name->name)
+    {
+      gfc_error ("'%s' of module '%s', imported at %C, is also the name of the "
+		 "current program unit", st_sym->name, module_name);
+      return true;
+    }
+
   rsym = info->u.rsym.sym;
   if (st_sym == rsym)
     return false;
diff --git a/gcc/testsuite/gfortran.dg/generic_17.f90 b/gcc/testsuite/gfortran.dg/generic_17.f90
index 968d9c1..0e9a41d 100644
--- a/gcc/testsuite/gfortran.dg/generic_17.f90
+++ b/gcc/testsuite/gfortran.dg/generic_17.f90
@@ -34,7 +34,7 @@  module foo_mod
   use d_foo_mod
 end module foo_mod
 
-subroutine s_foobar(x)  

+subroutine s_foobar2(x)  

   use foo_mod
-end subroutine s_foobar

+end subroutine s_foobar2

 ! { dg-final { cleanup-modules "s_foo_mod d_foo_mod foo_mod" } }
diff --git a/gcc/testsuite/gfortran.dg/interface_3.f90 b/gcc/testsuite/gfortran.dg/interface_3.f90
index 0a23fb0..1d954ee 100644
--- a/gcc/testsuite/gfortran.dg/interface_3.f90
+++ b/gcc/testsuite/gfortran.dg/interface_3.f90
@@ -5,6 +5,8 @@ 
 !
 ! Contributed by Joost VandeVondele  <jv244@cam.ac.uk>
 !
+! Modified for PR fortran/34657
+!
 module test_mod
 interface
   subroutine my_sub (a)
@@ -30,14 +32,14 @@  end module
 ! This is the original PR, excepting that the error requires the symbol
 ! to be referenced.
 subroutine my_sub (a)
-  use test_mod
+  use test_mod     ! { dg-error "is also the name of the current program unit" }
   real a
   call my_sub (a)  ! { dg-error "ambiguous reference" }
   print *, a
 end subroutine
 
 integer function my_fun (a)
-  use test_mod
+  use test_mod ! { dg-error "is also the name of the current program unit" }
   real a
   print *, a
   my_fun = 1  ! { dg-error "ambiguous reference" }
--- /dev/null	2011-07-17 08:09:09.371888531 +0200
+++ gcc/gcc/testsuite/gfortran.dg/use_14.f90	2011-07-17 19:46:55.000000000 +0200
@@ -0,0 +1,19 @@ 
+! { dg-do compile }
+!
+! PR fortran/34657
+!
+module test_mod
+interface
+  subroutine my_sub (a)
+    real a
+  end subroutine
+end interface
+end module
+
+subroutine my_sub (a)
+  use test_mod, gugu => my_sub
+  real a
+  print *, a
+end subroutine
+
+END
--- /dev/null	2011-07-17 08:09:09.371888531 +0200
+++ gcc/gcc/testsuite/gfortran.dg/use_15.f90	2011-07-17 19:50:22.000000000 +0200
@@ -0,0 +1,39 @@ 
+! { dg-do compile }
+!
+! PR fortran/34657
+!
+module test_mod
+interface
+  subroutine my_sub (a)
+    real a
+  end subroutine
+end interface
+end module
+
+subroutine my_sub (a)
+  use test_mod ! { dg-error "is also the name of the current program unit" }
+  real a
+  print *, a
+end subroutine
+
+
+module test_mod2
+  integer :: my_sub2
+end module
+
+subroutine my_sub2 (a)
+  use test_mod2 ! { dg-error "is also the name of the current program unit" }
+  real a
+  print *, a
+end subroutine
+
+
+subroutine my_sub3 (a)
+  use test_mod2, my_sub3 => my_sub2  ! { dg-error "is also the name of the current program unit" }
+  real a
+  print *, a
+end subroutine
+
+END
+
+! { dg-final { cleanup-modules "test_mod test_mod2" } }