aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2011-07-17 21:57:10 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2011-07-17 21:57:10 +0200
commit63523a1fa58d1059e9c2d9ac926873fae010a367 (patch)
tree52dd10e8bef572d706dc9826d00910855edbbe4e
parent1ff247496641c78fbfbeb6a04db2c8dbdedbcf1f (diff)
downloadgcc-63523a1fa58d1059e9c2d9ac926873fae010a367.zip
gcc-63523a1fa58d1059e9c2d9ac926873fae010a367.tar.gz
gcc-63523a1fa58d1059e9c2d9ac926873fae010a367.tar.bz2
re PR fortran/34657 (program-unit MY_SUB imports symbol MY_SUB)
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
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/module.c7
-rw-r--r--gcc/testsuite/ChangeLog9
-rw-r--r--gcc/testsuite/gfortran.dg/generic_17.f904
-rw-r--r--gcc/testsuite/gfortran.dg/interface_3.f906
-rw-r--r--gcc/testsuite/gfortran.dg/use_14.f9019
-rw-r--r--gcc/testsuite/gfortran.dg/use_15.f9039
7 files changed, 86 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 19339a6..d1f354e 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,11 @@
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
* expr.c (gfc_check_pointer_assign): Fix checking for invalid
pointer bounds.
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/ChangeLog b/gcc/testsuite/ChangeLog
index 2e5683c..9eb36a7 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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.
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" }
diff --git a/gcc/testsuite/gfortran.dg/use_14.f90 b/gcc/testsuite/gfortran.dg/use_14.f90
new file mode 100644
index 0000000..63f3dff
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/use_14.f90
@@ -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
index 0000000..0995888
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/use_15.f90
@@ -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" } }