https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88117
--- Comment #6 from Thomas Koenig <tkoenig at gcc dot gnu.org> --- (In reply to Thomas Koenig from comment #5) > Rather, the problem seems to be somewhere in trans-expr.c: > > if (expr1->ts.deferred && gfc_check_dependency (expr1, expr2, true)) > rse.string_length = gfc_evaluate_now (rse.string_length, &rse.pre); > > > The variable created by gfc_evaluate_now here is D.3908, the culprit > for gimplification in the simplified test case. Hmm... Actually, not here. It is /* Stabilize a string length for temporaries. */ if (expr2->ts.type == BT_CHARACTER && !expr1->ts.deferred && !(VAR_P (rse.string_length) || TREE_CODE (rse.string_length) == PARM_DECL || TREE_CODE (rse.string_length) == INDIRECT_REF)) string_length = gfc_evaluate_now (rse.string_length, &rse.pre); where string_length seems to be added to the wrong scope - it is used before it is defined, which causes the gimplification error. Now, I'm not sure how to change that, at least not tonight.