Commit 91480ff3 by Mikael Morin

Use the local name instead of the original name in the check for name conflicts...


Use the local name instead of the original name in the check for name conflicts
between a hosting program unit and use-associated symbols
in that program unit.

fortran/
	PR fortran/63744
	* module.c (check_for_ambiguous): Change argument type
	from gfc_symbol to gfc_symtree.  Check local (symtree) name
	instead of original (symbol) name.
	(read_module): Update caller.

testsuite/
	PR fortran/63744
	gfortran.dg/use_rename_8.f90: New.

From-SVN: r220515
parent 57f4f0d5
2015-02-08 Mikael Morin <mikael@gcc.gnu.org>
PR fortran/63744
* module.c (check_for_ambiguous): Change argument type
from gfc_symbol to gfc_symtree. Check local (symtree) name
instead of original (symbol) name.
(read_module): Update caller.
2015-02-06 Paul Thomas <pault@gcc.gnu.org>
PR fortran/63205
......
......@@ -4795,19 +4795,21 @@ read_cleanup (pointer_info *p)
/* It is not quite enough to check for ambiguity in the symbols by
the loaded symbol and the new symbol not being identical. */
static bool
check_for_ambiguous (gfc_symbol *st_sym, pointer_info *info)
check_for_ambiguous (gfc_symtree *st, pointer_info *info)
{
gfc_symbol *rsym;
module_locus locus;
symbol_attribute attr;
gfc_symbol *st_sym;
if (gfc_current_ns->proc_name && st_sym->name == gfc_current_ns->proc_name->name)
if (gfc_current_ns->proc_name && st->name == gfc_current_ns->proc_name->name)
{
gfc_error ("%qs of module %qs, imported at %C, is also the name of the "
"current program unit", st_sym->name, module_name);
"current program unit", st->name, module_name);
return true;
}
st_sym = st->n.sym;
rsym = info->u.rsym.sym;
if (st_sym == rsym)
return false;
......@@ -5037,7 +5039,7 @@ read_module (void)
if (st != NULL)
{
/* Check for ambiguous symbols. */
if (check_for_ambiguous (st->n.sym, info))
if (check_for_ambiguous (st, info))
st->ambiguous = 1;
else
info->u.rsym.symtree = st;
......
2015-02-08 Mikael Morin <mikael@gcc.gnu.org>
PR fortran/63744
gfortran.dg/use_rename_8.f90: New.
2015-02-08 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/addr7.ad[sb]: New test.
......
! { dg-do compile }
!
! PR fortran/63744
! duplicate use rename used to be rejected when the target name
! was that of the current program unit
!
! Original testcase from Roger Ferrer Ibanez <roger.ferrer@bsc.es>
MODULE MOO
INTEGER :: A, B, C, D, E, F, G, H, I
END MODULE MOO
SUBROUTINE S
USE MOO, ONLY: X => A, X => A
END SUBROUTINE S
SUBROUTINE T
USE MOO, ONLY: X => B
USE MOO, ONLY: X => B
END SUBROUTINE T
SUBROUTINE C
USE MOO, ONLY: C ! { dg-error "is also the name of the current program unit" }
END SUBROUTINE C
SUBROUTINE D
USE MOO, ONLY: X => D
END SUBROUTINE D
SUBROUTINE E
USE MOO, ONLY: X => E, X => E
END SUBROUTINE E
SUBROUTINE F
USE MOO, ONLY: X => F
USE MOO, ONLY: X => F
END SUBROUTINE F
SUBROUTINE X
USE MOO, ONLY: X => G ! { dg-error "is also the name of the current program unit" }
END SUBROUTINE X
SUBROUTINE Y
USE MOO, ONLY: Y => H ! { dg-error "is also the name of the current program unit" }
END SUBROUTINE Y
SUBROUTINE Z
USE MOO, ONLY: Z => I, Z => I ! { dg-error "is also the name of the current program unit" }
END SUBROUTINE Z
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment