Commit 08ee9e85 by Paul Thomas

re PR fortran/31609 (module that calls a contained function with an ENTRY point)

2007-08-01  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/31609
	* resolve.c (resolve_entries): Entries declared to be module
	procedures must point to the function namespace.

2007-08-01  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/31609
	* gfortran.dg/entry_12.f90: New test.

From-SVN: r127108
parent 13e7cedb
2007-08-01 Paul Thomas <pault@gcc.gnu.org>
PR fortran/31609
* resolve.c (resolve_entries): Entries declared to be module
procedures must point to the function namespace.
2007-07-31 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
PR fortran/32938
......
......@@ -431,6 +431,15 @@ resolve_entries (gfc_namespace *ns)
&& ns->parent && ns->parent->proc_name->attr.flavor == FL_MODULE)
el->sym->ns = ns;
/* Do the same for entries where the master is not a module
procedure. These are retained in the module namespace because
of the module procedure declaration. */
for (el = el->next; el; el = el->next)
if (el->sym->ns->proc_name->attr.flavor == FL_MODULE
&& el->sym->attr.mod_proc)
el->sym->ns = ns;
el = ns->entries;
/* Add an entry statement for it. */
c = gfc_get_code ();
c->op = EXEC_ENTRY;
......
2007-08-01 Paul Thomas <pault@gcc.gnu.org>
PR fortran/31609
* gfortran.dg/entry_12.f90: New test.
2007-07-31 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
PR fortran/32938
! { dg-do run }
! Tests the fix for pr31609, where module procedure entries found
! themselves in the wrong namespace. This test checks that all
! combinations of generic and specific calls work correctly.
!
! Contributed by Paul Thomas <pault@gcc.gnu.org> as comment #8 to the pr.
!
MODULE ksbin1_aux_mod
interface foo
module procedure j
end interface
interface bar
module procedure k
end interface
interface foobar
module procedure j, k
end interface
CONTAINS
FUNCTION j ()
j = 1
return
ENTRY k (i)
k = 2
END FUNCTION j
END MODULE ksbin1_aux_mod
use ksbin1_aux_mod
if (any ((/foo (), bar (99), foobar (), foobar (99), j (), k (99)/) .ne. &
(/1, 2, 1, 2, 1, 2/))) Call abort ()
end
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