Around line 3923 in fortran/trans-array.c, there are if (expr->ts.type == BT_CHARACTER) { gcc_assert (expr->ts.cl && expr->ts.cl->length && expr->ts.cl->length->expr_type == EXPR_CONSTANT); loop.temp_ss->string_length = gfc_conv_mpz_to_tree (expr->ts.cl->length->value.integer, expr->ts.cl->length->ts.kind); expr->ts.cl->backend_decl = loop.temp_ss->string_length; } loop.temp_ss->data.temp.type = gfc_typenode_for_spec (&expr->ts); ^^^^^^^^^^^^^^^ Bad indentation.
/* ... which can hold our string, if present. */ if (expr->ts.type == BT_CHARACTER) { loop.temp_ss->string_length = TYPE_SIZE_UNIT (loop.temp_ss->data.temp.type); se->string_length = loop.temp_ss->string_length; } else loop.temp_ss->string_length = NULL; Also why are there duplicated if (expr->ts.type == BT_CHARACTER) H.J.