https://gcc.gnu.org/g:52651819ae4c514f7eb661be386ff237ba618009

commit 52651819ae4c514f7eb661be386ff237ba618009
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 127cc0cd0951..c1f74e9fd1e2 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -5915,6 +5915,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,
@@ -10531,7 +10532,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 c10d1d9c6f95..3fdc2f4c5d72 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -3249,6 +3249,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 a2cafaf1a8ef..ff19922638c8 100644
--- a/gcc/fortran/trans-types.cc
+++ b/gcc/fortran/trans-types.cc
@@ -3247,9 +3247,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);
        }

Reply via email to