https://gcc.gnu.org/g:a4e780d595db7a34802ad75b6c276d332defa857
commit a4e780d595db7a34802ad75b6c276d332defa857 Author: Mikael Morin <mik...@gcc.gnu.org> Date: Thu May 29 12:50:15 2025 +0200 Correction régression deferred_character_25 Diff: --- gcc/fortran/trans-array.cc | 3 ++- gcc/fortran/trans-descriptor.cc | 1 + gcc/fortran/trans-types.cc | 3 --- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index a0fc020d2890..78934be97577 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -6034,6 +6034,7 @@ gfc_array_allocate (gfc_se * se, gfc_expr * expr, tree status, tree errmsg, if (expr->ts.type == BT_CHARACTER && TREE_CODE (se->string_length) == COMPONENT_REF + && expr->ts.u.cl->backend_decl && expr->ts.u.cl->backend_decl != se->string_length && VAR_P (expr->ts.u.cl->backend_decl)) gfc_add_modify (&se->pre, expr->ts.u.cl->backend_decl, @@ -10687,7 +10688,7 @@ gfc_alloc_allocatable_for_assignment (gfc_loopinfo *loop, tmp = tmpse.expr; expr2->ts.u.cl->backend_decl = gfc_evaluate_now (tmp, &fblock); } - tmp = fold_convert (TREE_TYPE (expr1->ts.u.cl->backend_decl), tmp); + tmp = fold_convert (gfc_charlen_type_node, tmp); } if (expr1->ts.u.cl->backend_decl diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc index 566ddf78a2df..7202711799df 100644 --- a/gcc/fortran/trans-descriptor.cc +++ b/gcc/fortran/trans-descriptor.cc @@ -3271,6 +3271,7 @@ gfc_descr_init_count (tree descriptor, int rank, int corank, gfc_expr ** lower, it initialized. */ if (expr->ts.type == BT_CHARACTER && expr->ts.deferred + && expr->ts.u.cl->backend_decl && VAR_P (expr->ts.u.cl->backend_decl)) { type = gfc_typenode_for_spec (&expr->ts); diff --git a/gcc/fortran/trans-types.cc b/gcc/fortran/trans-types.cc index 579d78d49dbd..7318b9598ca2 100644 --- a/gcc/fortran/trans-types.cc +++ b/gcc/fortran/trans-types.cc @@ -3250,9 +3250,6 @@ gfc_get_derived_type (gfc_symbol * derived, int codimen) gfc_conv_const_charlen (c->ts.u.cl); gcc_assert (c->ts.u.cl->backend_decl); } - else if (c->ts.type == BT_CHARACTER) - c->ts.u.cl->backend_decl - = build_int_cst (gfc_charlen_type_node, 0); field_type = gfc_typenode_for_spec (&c->ts, codimen); }