http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49648
--- Comment #10 from Mikael Morin <mikael at gcc dot gnu.org> 2011-07-06 17:28:14 UTC --- (In reply to comment #9) > (In reply to comment #8) > > + else if (mp_flag && sym->attr.flavor == FL_PROCEDURE && > > sym->attr.function) > > + gfc_resolve_array_spec (sym->result->as, false); > > I think one could add somewhere a condition "if (sym != sym->result)"; This is contained in mp_flag :-) > and I was wondering whether also other items like length-type parameters are > effected. (I think, usually character lengths are shared, but I am not sure > whether it also happens here.) Well, it's difficult to tell by quickly (or even slowly) browsing through the function. I was supposing resolve_symbol would handle all other items in my previous patch, but it fails unfortunately (for reasons that I have admittedly not investigated); hence this less ambitious one, which doesn't regress at least. For what it's worth the following variant using character lengths doesn't ICE. I can't tell in the general case though. module m2 COMPLEX, SAVE, ALLOCATABLE :: P(:) contains FUNCTION getPhaseMatrix() RESULT(PM) CHARACTER(len=SIZE(P)) :: PM PM="foo " END FUNCTION end module m2 module m use m2 contains SUBROUTINE gf_generateEmbPot() CHARACTER(3) :: sigma2 sigma2 = TRIM(getPhaseMatrix()) END SUBROUTINE end module m