Hello,
a small, unexciting bug.
For the case:
subroutine m()
use m
end subroutine m
the USE statement is rejected, but it is not if the subroutine is contained.
In the latter case, the namespace of the symbol of the subroutine is the
parent namespace, which confuses the error condition in check_for_ambiguous.
Regression tested on x86_64-unknown-linux-gnu. OK for trunk?
Mikael
2013-01-08 Mikael Morin <mik...@gcc.gnu.org>
PR fortran/47203
* module.c (check_for_ambiguous): Get the current program unit using
gfc_current_ns.
diff --git a/module.c b/module.c
index f3b3caa..604acbb 100644
--- a/module.c
+++ b/module.c
@@ -4493,7 +4493,7 @@ 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)
+ if (st_sym->name == gfc_current_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);
2013-01-08 Mikael Morin <mik...@gcc.gnu.org>
PR fortran/47203
* gfortran.dg/use_28.f90: New test.
! { dg-do compile }
!
! PR fortran/47203
! The USE statement of a module was not rejected in a procedure with the same
! name if the procedure was contained.
!
! Contributed by Tobias Burnus <bur...@net-b.de>
module m
end module m
call m
contains
subroutine m()
use m ! { dg-error "is also the name of the current program unit" }
end subroutine m
end