https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70601
janus at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |janus at gcc dot gnu.org --- Comment #7 from janus at gcc dot gnu.org --- The cause of the problem is that we wrongly detect an allocatable function result and try to free it after the CALL. The following is sufficient to suppress the ICE: Index: gcc/fortran/trans-expr.c =================================================================== --- gcc/fortran/trans-expr.c (Revision 242352) +++ gcc/fortran/trans-expr.c (Arbeitskopie) @@ -6087,7 +6087,7 @@ after use. This necessitates the creation of a temporary to hold the result to prevent duplicate calls. */ if (!byref && sym->ts.type != BT_CHARACTER - && sym->attr.allocatable && !sym->attr.dimension) + && sym->attr.allocatable && !sym->attr.dimension && !comp) { tmp = gfc_create_var (TREE_TYPE (se->expr), NULL); gfc_add_modify (&se->pre, tmp, se->expr); However, we probably still need to deal with PPCs that have allocatable function results.