re PR fortran/34657 (program-unit MY_SUB imports symbol MY_SUB)
authorTobias Burnus <burnus@net-b.de>
Sun, 17 Jul 2011 19:57:10 +0000 (21:57 +0200)
committerTobias Burnus <burnus@gcc.gnu.org>
Sun, 17 Jul 2011 19:57:10 +0000 (21:57 +0200)
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.

Co-Authored-By: Thomas Koenig <tkoenig@gcc.gnu.org>
From-SVN: r176375

gcc/fortran/ChangeLog
gcc/fortran/module.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/generic_17.f90
gcc/testsuite/gfortran.dg/interface_3.f90
gcc/testsuite/gfortran.dg/use_14.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/use_15.f90 [new file with mode: 0644]

index 19339a6a13fb1e76f7ec5f5521dd85c7a1b5d56f..d1f354e13c6011859cd5aa38c3902dc67b9accf6 100644 (file)
@@ -1,3 +1,9 @@
+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>
 
        PR fortran/49624
index 4afe4672db8a51b846797cfc90957bd2c33ccd4a..b62ad8d08e06728fbeb24b2fb6b5aea1b87f094b 100644 (file)
@@ -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;
index 2e5683c623ae57a6c11371b43bf23d2bf5a7cb38..9eb36a76045e95a976ce3b86420b1c9a8b460f1c 100644 (file)
@@ -1,3 +1,12 @@
+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.
+
 2011-07-17  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gnat.dg/pointer_controlled.adb: New test.
index 968d9c10c3707e8c8d4db0c303dc9051222e9260..0e9a41d5b027b8ca55c50e427dacefc52d75eb70 100644 (file)
@@ -34,7 +34,7 @@ module foo_mod
   use d_foo_mod\r
 end module foo_mod\r
 \r
-subroutine s_foobar(x)  \r
+subroutine s_foobar2(x)  \r
   use foo_mod\r
-end subroutine s_foobar\r
+end subroutine s_foobar2\r
 ! { dg-final { cleanup-modules "s_foo_mod d_foo_mod foo_mod" } }
index 0a23fb09806c3ae960a34b1acee11573316d5016..1d954eef8b6d5c76a119ca97beb3af9251ce07d4 100644 (file)
@@ -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" }
diff --git a/gcc/testsuite/gfortran.dg/use_14.f90 b/gcc/testsuite/gfortran.dg/use_14.f90
new file mode 100644 (file)
index 0000000..63f3dff
--- /dev/null
@@ -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
diff --git a/gcc/testsuite/gfortran.dg/use_15.f90 b/gcc/testsuite/gfortran.dg/use_15.f90
new file mode 100644 (file)
index 0000000..0995888
--- /dev/null
@@ -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" } }