https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108581

--- Comment #4 from anlauf at gcc dot gnu.org ---
The following one-liner fixes the issue:

diff --git a/gcc/fortran/trans-io.cc b/gcc/fortran/trans-io.cc
index df2fef70172..b73a8b4948d 100644
--- a/gcc/fortran/trans-io.cc
+++ b/gcc/fortran/trans-io.cc
@@ -2644,6 +2644,7 @@ gfc_trans_transfer (gfc_code * code)
       if (expr->ts.type != BT_CLASS
         && expr->expr_type == EXPR_VARIABLE
         && ((expr->symtree->n.sym->ts.type == BT_DERIVED && expr->ts.deferred)
+            || (expr->ts.type == BT_CHARACTER && expr->ts.deferred)
             || (expr->symtree->n.sym->assoc
                 && expr->symtree->n.sym->assoc->variable)
             || gfc_expr_attr (expr).pointer))

However, this is overkill and regresses on gfortran.dg/implied_do_io_4.f90

Reply via email to