diff options
author | Paul Brook <paul@codesourcery.com> | 2004-07-11 23:00:08 +0000 |
---|---|---|
committer | Paul Brook <pbrook@gcc.gnu.org> | 2004-07-11 23:00:08 +0000 |
commit | 682e69e1a3138385c1d1c7387baedc3e3f2d3a57 (patch) | |
tree | f82026b8934f8c5eee67469dbea505c8961f5d15 /gcc/fortran | |
parent | df23e6bbfaa8254963aa5254a851c942f3c8b594 (diff) | |
download | gcc-682e69e1a3138385c1d1c7387baedc3e3f2d3a57.zip gcc-682e69e1a3138385c1d1c7387baedc3e3f2d3a57.tar.gz gcc-682e69e1a3138385c1d1c7387baedc3e3f2d3a57.tar.bz2 |
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
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/parse.c | 5 |
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index c3007b7..3a45a96 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +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 diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c index 1295fb0..32f5185 100644 --- a/gcc/fortran/parse.c +++ b/gcc/fortran/parse.c @@ -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); |