Commit 0815fd25 by Paul Thomas

re PR fortran/66993 (Spurious ambiguous symbol error with submodules)

2015-09-10  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/66993
	* module.c (read_module): If a symtree exists and the symbol has
	been associated in a submodule from a parent (sub)module, attach
	the symbol to a 'unique symtree' and the new symbol to the
	existing symtree.

2015-09-10  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/66993
	* gfortran.dg/submodule_11.f08: New test.

From-SVN: r227648
parent c661ca79
2015-09-10 Paul Thomas <pault@gcc.gnu.org>
PR fortran/66993
* module.c (read_module): If a symtree exists and the symbol has
been associated in a submodule from a parent (sub)module, attach
the symbol to a 'unique symtree' and the new symbol to the
existing symtree.
2015-09-04 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
* intrinsic.h (gfc_simplify_mvbits): Remove.
......
......@@ -5132,7 +5132,8 @@ read_module (void)
st = gfc_find_symtree (gfc_current_ns->sym_root, p);
if (st != NULL)
if (st != NULL
&& !(st->n.sym && st->n.sym->attr.used_in_submodule))
{
/* Check for ambiguous symbols. */
if (check_for_ambiguous (st, info))
......@@ -5142,14 +5143,23 @@ read_module (void)
}
else
{
st = gfc_find_symtree (gfc_current_ns->sym_root, name);
/* Create a symtree node in the current namespace for this
symbol. */
st = check_unique_name (p)
? gfc_get_unique_symtree (gfc_current_ns)
: gfc_new_symtree (&gfc_current_ns->sym_root, p);
st->ambiguous = ambiguous;
if (st)
{
/* This symbol is host associated from a module in a
submodule. Hide it with a unique symtree. */
gfc_symtree *s = gfc_get_unique_symtree (gfc_current_ns);
s->n.sym = st->n.sym;
st->n.sym = NULL;
}
else
{
/* Create a symtree node in the current namespace for this
symbol. */
st = check_unique_name (p)
? gfc_get_unique_symtree (gfc_current_ns)
: gfc_new_symtree (&gfc_current_ns->sym_root, p);
st->ambiguous = ambiguous;
}
sym = info->u.rsym.sym;
......
2015-09-10 Paul Thomas <pault@gcc.gnu.org>
PR fortran/66993
* gfortran.dg/submodule_11.f08: New test.
2015-09-10 Oleg Endo <olegendo@gcc.gnu.org>
PR target/67506
......@@ -476,7 +481,7 @@
2015-08-28 Andrew Bennett <andrew.bennett@imgtec.com>
* gcc.target/mips/madd-8.c: Add lo register to clobber list.
* gcc.target/mips/madd-8.c: Add lo register to clobber list.
* gcc.target/mips/msub-8.c: Ditto
2015-08-27 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
......
! { dg-do run }
! Test the fix for PR66993, in which the use associated version of 'i'
! was incorrectly determined to be ambiguous with the 'i', host associated
! in submodule 'sm' from the module 'm'. The principle has been tested with
! the function 'time_two' in addition.
!
! Contributed by Mikael Morin <mikael.morin@sfr.fr>
!
module m
integer, parameter :: i = -1
interface
module subroutine show_i
end subroutine show_i
end interface
contains
integer function times_two (arg)
integer :: arg
times_two = -2*arg
end function
end module m
module n
integer, parameter :: i = 2
contains
integer function times_two (arg)
integer :: arg
times_two = 2*arg
end function
end module n
submodule (m) sm
use n
contains
module subroutine show_i
if (i .ne. 2) call abort
if (times_two (i) .ne. 4) call abort
end subroutine show_i
end submodule sm
program p
use m
call show_i
if (i .ne. -1) call abort
if (times_two (i) .ne. 2) call abort
end program
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