Commit 682e69e1 by Paul Brook Committed by Paul Brook

re PR fortran/15986 (Forward referenced procedure not handled correctly)

	PR fortran/15986
	* parse.c (gfc_fixup_sibling_symbols): Also look for untyped
	variables.
	(parse_contained): Mark contained symbols as referenced.
testsuite/
	* gfortran.dg/contained_1.f90: New test.

From-SVN: r84536
parent df23e6bb
2004-07-11 Paul Brook <paul@codesourcery.com>
PR fortran/15986
* parse.c (gfc_fixup_sibling_symbols): Also look for untyped
variables.
(parse_contained): Mark contained symbols as referenced.
2004-07-11 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
PR fortran/16455
......
......@@ -2116,7 +2116,9 @@ gfc_fixup_sibling_symbols (gfc_symbol * sym, gfc_namespace * siblings)
continue;
old_sym = st->n.sym;
if (old_sym->attr.flavor == FL_PROCEDURE && old_sym->ns == ns
if ((old_sym->attr.flavor == FL_PROCEDURE
|| old_sym->ts.type == BT_UNKNOWN)
&& old_sym->ns == ns
&& ! old_sym->attr.contained)
{
/* Replace it with the symbol from the parent namespace. */
......@@ -2199,6 +2201,7 @@ parse_contained (int module)
/* Mark this as a contained function, so it isn't replaced
by other module functions. */
sym->attr.contained = 1;
sym->attr.referenced = 1;
/* Fix up any sibling functions that refer to this one. */
gfc_fixup_sibling_symbols (sym, gfc_current_ns);
......
2004-07-11 Paul Brook <paul@codesourcery.com>
PR fortran/15986
* gfortran.dg/contained_1.f90: New test.
2004-07-11 Mark Mitchell <mark@codesourcery.com>
* g++.dg/parse/defarg8.C: New test.
......
! PR15986
! Siblings may be used as actual arguments, in which case they look like
! variables during parsing. Also checks that actual variables aren't replaced
! by siblings with the same name
! { dg-do run }
module contained_1_mod
integer i
contains
subroutine a
integer :: c = 42
call sub(b, c)
end subroutine a
subroutine b()
i = i + 1
end subroutine b
subroutine c
end subroutine
end module
subroutine sub (proc, var)
external proc1
integer var
if (var .ne. 42) call abort
call proc
end subroutine
program contained_1
use contained_1_mod
i = 0
call a
if (i .ne. 1) 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