http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49648
Mikael Morin <mikael at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |mikael at gcc dot gnu.org --- Comment #7 from Mikael Morin <mikael at gcc dot gnu.org> 2011-07-06 14:25:10 UTC --- Here is a "fix". The important part I suppose is that one has to apply resolve_symbol on sym->result. It is the case before the patch, only if the symbol has unknown type. diff --git a/resolve.c b/resolve.c index f484a22..908e72b 100644 --- a/resolve.c +++ b/resolve.c @@ -12181,21 +12181,22 @@ resolve_symbol (gfc_symbol *sym) in the case that there is no implicit type. */ if (!mp_flag) gfc_set_default_type (sym, sym->attr.external, NULL); - else - { - /* Result may be in another namespace. */ - resolve_symbol (sym->result); + } + } - if (!sym->result->attr.proc_pointer) - { - sym->ts = sym->result->ts; - sym->as = gfc_copy_array_spec (sym->result->as); - sym->attr.dimension = sym->result->attr.dimension; - sym->attr.pointer = sym->result->attr.pointer; - sym->attr.allocatable = sym->result->attr.allocatable; - sym->attr.contiguous = sym->result->attr.contiguous; - } - } + if (mp_flag && sym->attr.flavor == FL_PROCEDURE && sym->attr.function) + { + /* Result may be in another namespace. */ + resolve_symbol (sym->result); + + if (!sym->result->attr.proc_pointer) + { + sym->ts = sym->result->ts; + sym->as = gfc_copy_array_spec (sym->result->as); + sym->attr.dimension = sym->result->attr.dimension; + sym->attr.pointer = sym->result->attr.pointer; + sym->attr.allocatable = sym->result->attr.allocatable; + sym->attr.contiguous = sym->result->attr.contiguous; } }