https://gcc.gnu.org/g:59d20ab818b5c1c5368e70d0af3221e3f1e83db3

commit 59d20ab818b5c1c5368e70d0af3221e3f1e83db3
Author: Mikael Morin <mik...@gcc.gnu.org>
Date:   Thu Jun 19 18:04:56 2025 +0200

    Utilisation gfc_conv_descriptor_offset_{g,s}et
    
    Correction pr43808
    
    Correction gfc_conv_descriptor_offset
    
    Utilisation gfc_conv_descriptor_offset_set
    
    Suppression retour à la ligne inutile offset_set

Diff:
---
 gcc/fortran/trans-array.cc      |  9 ++++-----
 gcc/fortran/trans-descriptor.cc | 11 +++++------
 gcc/fortran/trans-descriptor.h  |  1 -
 gcc/fortran/trans-expr.cc       |  2 +-
 4 files changed, 10 insertions(+), 13 deletions(-)

diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index 31ed8546488b..185de0886feb 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -8996,9 +8996,8 @@ gfc_conv_array_parameter (gfc_se *se, gfc_expr *expr, 
bool g77,
              new_field = gfc_conv_descriptor_dtype (new_desc);
              gfc_add_modify (&se->pre, new_field, old_field);
 
-             old_field = gfc_conv_descriptor_offset (old_desc);
-             new_field = gfc_conv_descriptor_offset (new_desc);
-             gfc_add_modify (&se->pre, new_field, old_field);
+             old_field = gfc_conv_descriptor_offset_get (old_desc);
+             gfc_conv_descriptor_offset_set (&se->pre, new_desc, old_field);
 
              for (int i = 0; i < expr->rank; i++)
                {
@@ -11168,8 +11167,8 @@ gfc_alloc_allocatable_for_assignment (gfc_loopinfo 
*loop,
                                          gfc_index_zero_node);
        }
 
-      tmp = gfc_conv_descriptor_offset (desc);
-      gfc_add_modify (&loop_pre_block, tmp, gfc_index_zero_node);
+      gfc_conv_descriptor_offset_set (&loop_pre_block, desc,
+                                     gfc_index_zero_node);
 
       tmp = fold_build2_loc (input_location, EQ_EXPR,
                             logical_type_node, array1,
diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc
index 4660130c4464..88bbacd08e30 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -215,8 +215,8 @@ gfc_conv_descriptor_data_set (stmtblock_t *block, tree 
desc, tree value)
 }
 
 
-tree
-gfc_conv_descriptor_offset (tree desc)
+static tree
+get_descriptor_offset (tree desc)
 {
   tree field = gfc_get_descriptor_field (desc, OFFSET_FIELD);
   gcc_assert (TREE_TYPE (field) == gfc_array_index_type);
@@ -226,14 +226,13 @@ gfc_conv_descriptor_offset (tree desc)
 tree
 gfc_conv_descriptor_offset_get (tree desc)
 {
-  return gfc_conv_descriptor_offset (desc);
+  return get_descriptor_offset (desc);
 }
 
 void
-gfc_conv_descriptor_offset_set (stmtblock_t *block, tree desc,
-                               tree value)
+gfc_conv_descriptor_offset_set (stmtblock_t *block, tree desc, tree value)
 {
-  tree t = gfc_conv_descriptor_offset (desc);
+  tree t = get_descriptor_offset (desc);
   gfc_add_modify (block, t, fold_convert (TREE_TYPE (t), value));
 }
 
diff --git a/gcc/fortran/trans-descriptor.h b/gcc/fortran/trans-descriptor.h
index ade63bf19751..36365ff32ae0 100644
--- a/gcc/fortran/trans-descriptor.h
+++ b/gcc/fortran/trans-descriptor.h
@@ -57,7 +57,6 @@ tree gfc_conv_descriptor_type (tree desc);
 tree gfc_get_descriptor_dimension (tree desc);
 tree gfc_conv_descriptor_dimension (tree desc, tree dim);
 tree gfc_conv_descriptor_token (tree desc);
-tree gfc_conv_descriptor_offset (tree desc);
 
 tree gfc_conv_descriptor_data_get (tree desc);
 tree gfc_conv_descriptor_offset_get (tree desc);
diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc
index 9e2b5f68793e..0cee29665675 100644
--- a/gcc/fortran/trans-expr.cc
+++ b/gcc/fortran/trans-expr.cc
@@ -9591,8 +9591,8 @@ gfc_trans_alloc_subarray_assign (tree dest, gfc_component 
* cm,
 
   /* Shift the lbound and ubound of temporaries to being unity,
      rather than zero, based. Always calculate the offset.  */
+  gfc_conv_descriptor_offset_set (&block, dest, gfc_index_zero_node);
   offset = gfc_conv_descriptor_offset_get (dest);
-  gfc_add_modify (&block, offset, gfc_index_zero_node);
   tmp2 =gfc_create_var (gfc_array_index_type, NULL);
 
   for (n = 0; n < expr->rank; n++)

Reply via email to