https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90561
--- Comment #8 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
This
Index: trans-expr.c
===================================================================
--- trans-expr.c (Revision 274370)
+++ trans-expr.c (Arbeitskopie)
@@ -10796,7 +10796,13 @@
if (expr1->ts.deferred
&& gfc_expr_attr (expr1).allocatable
&& gfc_check_dependency (expr1, expr2, true))
- rse.string_length = gfc_evaluate_now (rse.string_length, &rse.pre);
+ {
+ /* Add the variable to function scope. */
+ tree string_length;
+ string_length = gfc_create_var_np (TREE_TYPE (rse.string_length),
NULL);
+ gfc_add_decl_to_function (string_length);
+ gfc_add_modify (&rse.pre, rse.string_length, string_length);
+ }
string_length = rse.string_length;
}
else
gets rid of the ICE, but introduces new ones (and the run-time behavior
of the code is wrong, if one adds print *,z at the end of z1.f90).