https://gcc.gnu.org/g:06b46db5f03f0e7fef6f6a8e3395620287f8023f

commit 06b46db5f03f0e7fef6f6a8e3395620287f8023f
Author: Mikael Morin <mik...@gcc.gnu.org>
Date:   Tue Jul 15 17:17:33 2025 +0200

    Utilisation gfc_conv_descriptor_token_set

Diff:
---
 gcc/fortran/trans-array.cc      | 12 +++++-------
 gcc/fortran/trans-descriptor.cc | 10 ++++++++++
 gcc/fortran/trans-descriptor.h  |  1 +
 gcc/fortran/trans-expr.cc       | 12 +++++-------
 gcc/fortran/trans-intrinsic.cc  |  3 +--
 5 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index 02d6c68b45c5..acf643f6adbd 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -8365,7 +8365,7 @@ gfc_conv_expr_descriptor (gfc_se *se, gfc_expr *expr)
              tmp = GFC_TYPE_ARRAY_CAF_TOKEN (TREE_TYPE (tmp));
            }
 
-         gfc_add_modify (&loop.pre, gfc_conv_descriptor_token (parm), tmp);
+         gfc_conv_descriptor_token_set (&loop.pre, parm, tmp);
        }
       desc = parm;
     }
@@ -8974,7 +8974,7 @@ gfc_conv_array_parameter (gfc_se *se, gfc_expr *expr, 
bool g77,
            }
          else if (!ctree)
            {
-             tree old_field, new_field;
+             tree old_field;
 
              /* The original descriptor has transposed dims so we can't reuse
                 it directly; we have to create a new one.  */
@@ -9002,8 +9002,8 @@ gfc_conv_array_parameter (gfc_se *se, gfc_expr *expr, 
bool g77,
                     == GFC_ARRAY_ALLOCATABLE)
                {
                  old_field = gfc_conv_descriptor_token (old_desc);
-                 new_field = gfc_conv_descriptor_token (new_desc);
-                 gfc_add_modify (&se->pre, new_field, old_field);
+                 gfc_conv_descriptor_token_set (&se->pre, new_desc,
+                                                old_field);
                }
 
              gfc_conv_descriptor_data_set (&se->pre, new_desc, ptr);
@@ -11839,9 +11839,7 @@ gfc_trans_deferred_array (gfc_symbol * sym, 
gfc_wrapped_block * block)
             image.  This may happen, for example, with the caf_mpi
             implementation.  */
          TREE_STATIC (descriptor) = 1;
-         tmp = gfc_conv_descriptor_token (descriptor);
-         gfc_add_modify (&init, tmp, fold_convert (TREE_TYPE (tmp),
-                                                   null_pointer_node));
+         gfc_conv_descriptor_token_set (&init, descriptor, null_pointer_node);
        }
     }
 
diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc
index 43cfce6f4411..0ac1660d21ad 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -520,6 +520,16 @@ gfc_conv_descriptor_token (tree desc)
   return field;
 }
 
+void
+gfc_conv_descriptor_token_set (stmtblock_t *block, tree desc, tree value)
+{
+  location_t loc = input_location;
+  tree t = gfc_conv_descriptor_token (desc);
+  gfc_add_modify_loc (loc, block, t,
+                     fold_convert_loc (loc, TREE_TYPE (t), value));
+}
+
+
 static tree
 gfc_conv_descriptor_subfield (tree desc, tree dim, unsigned field_idx)
 {
diff --git a/gcc/fortran/trans-descriptor.h b/gcc/fortran/trans-descriptor.h
index 0547157bf2af..3f602219c284 100644
--- a/gcc/fortran/trans-descriptor.h
+++ b/gcc/fortran/trans-descriptor.h
@@ -83,6 +83,7 @@ void gfc_conv_descriptor_dimension_set (stmtblock_t *block, 
tree desc, int dim,
 void gfc_conv_descriptor_stride_set (stmtblock_t *block, tree desc, tree dim, 
tree value);
 void gfc_conv_descriptor_lbound_set (stmtblock_t *block, tree desc, tree dim, 
tree value);
 void gfc_conv_descriptor_ubound_set (stmtblock_t *block, tree desc, tree dim, 
tree value);
+void gfc_conv_descriptor_token_set (stmtblock_t *block, tree desc, tree value);
 
 tree gfc_build_null_descriptor (tree type);
 
diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc
index 04770378c0fe..e34716a99ad8 100644
--- a/gcc/fortran/trans-expr.cc
+++ b/gcc/fortran/trans-expr.cc
@@ -828,7 +828,7 @@ gfc_conv_derived_to_class (gfc_se *parmse, gfc_expr *e, 
gfc_symbol *fsym,
       if (POINTER_TYPE_P (TREE_TYPE (tmp)))
        tmp = build_fold_indirect_ref (tmp);
       gfc_get_caf_token_offset (parmse, &token, nullptr, tmp, NULL_TREE, e);
-      gfc_add_modify (&parmse->pre, gfc_conv_descriptor_token (ctree), token);
+      gfc_conv_descriptor_token_set (&parmse->pre, ctree, token);
     }
 
   if (optional)
@@ -9847,8 +9847,7 @@ gfc_trans_subcomponent_assign (tree dest, gfc_component * 
cm,
        {
          gfc_conv_descriptor_data_set (&block, dest, null_pointer_node);
          if (cm->attr.codimension && flag_coarray == GFC_FCOARRAY_LIB)
-           gfc_add_modify (&block, gfc_conv_descriptor_token (dest),
-                           null_pointer_node);
+           gfc_conv_descriptor_token_set (&block, dest, null_pointer_node);
        }
       else if (cm->attr.allocatable || cm->attr.pdt_array)
        {
@@ -11606,10 +11605,9 @@ gfc_trans_scalar_assign (gfc_se *lse, gfc_se *rse, 
gfc_typespec ts,
        {
          if (flag_coarray == GFC_FCOARRAY_LIB && assoc_assign)
            {
-             gfc_add_modify (&block, gfc_conv_descriptor_token (lse->expr),
-                             TYPE_LANG_SPECIFIC (
-                               TREE_TYPE (TREE_TYPE (rse->expr)))
-                               ->caf_token);
+             tree rtype = TREE_TYPE (TREE_TYPE (rse->expr));
+             tree rtoken = TYPE_LANG_SPECIFIC (rtype)->caf_token;
+             gfc_conv_descriptor_token_set (&block, lse->expr, rtoken);
            }
          if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (lse->expr)))
            lse->expr = gfc_conv_array_data (lse->expr);
diff --git a/gcc/fortran/trans-intrinsic.cc b/gcc/fortran/trans-intrinsic.cc
index 5082655f44b7..295e60bae540 100644
--- a/gcc/fortran/trans-intrinsic.cc
+++ b/gcc/fortran/trans-intrinsic.cc
@@ -13156,8 +13156,7 @@ conv_intrinsic_move_alloc (gfc_code *code)
     {
       /* Copy the array descriptor data has overwritten the to-token and 
cleared
         from.data.  Now also clear the from.token.  */
-      gfc_add_modify (&block, gfc_conv_descriptor_token (from_se.expr),
-                     null_pointer_node);
+      gfc_conv_descriptor_token_set (&block, from_se.expr, null_pointer_node);
     }
 
   if (to_expr->ts.type == BT_CHARACTER && to_expr->ts.deferred)

Reply via email to