https://gcc.gnu.org/g:4e18d37c9e33c45cda9c62eaa84d3ad75bbe0e0f

commit 4e18d37c9e33c45cda9c62eaa84d3ad75bbe0e0f
Author: Mikael Morin <mik...@gcc.gnu.org>
Date:   Fri Feb 14 11:22:35 2025 +0100

    Mise à jour offset & span dans gfc_array_init_size

Diff:
---
 gcc/fortran/trans-array.cc | 30 ++++++++++--------------------
 1 file changed, 10 insertions(+), 20 deletions(-)

diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index 9c813806f93c..3d9ee9901392 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -5727,8 +5727,8 @@ descriptor_element_size (tree descriptor, tree 
expr3_elem_size,
 /*GCC ARRAYS*/
 
 static tree
-gfc_array_init_size (tree descriptor, int rank, int corank, tree * poffset,
-                    gfc_expr ** lower, gfc_expr ** upper, stmtblock_t * pblock,
+gfc_array_init_size (tree descriptor, int rank, int corank, gfc_expr ** lower,
+                    gfc_expr ** upper, stmtblock_t * pblock,
                     stmtblock_t * descriptor_block, tree * overflow,
                     tree expr3_elem_size, gfc_expr *expr3, tree expr3_desc,
                     bool e3_has_nodescriptor, gfc_expr *expr,
@@ -5971,6 +5971,12 @@ gfc_array_init_size (tree descriptor, int rank, int 
corank, tree * poffset,
   if (rank == 0)
     return element_size;
 
+  /* Update the array descriptor with the offset and the span.  */
+  offset = gfc_evaluate_now (offset, pblock);
+  gfc_conv_descriptor_offset_set (descriptor_block, descriptor, offset);
+  tmp = fold_convert (gfc_array_index_type, element_size);
+  gfc_conv_descriptor_span_set (descriptor_block, descriptor, tmp);
+
   stride = fold_convert (size_type_node, stride);
 
   /* First check for overflow. Since an array of type character can
@@ -5997,12 +6003,6 @@ gfc_array_init_size (tree descriptor, int rank, int 
corank, tree * poffset,
   size = fold_build2_loc (input_location, MULT_EXPR, size_type_node,
                          stride, element_size);
 
-  if (poffset != NULL)
-    {
-      offset = gfc_evaluate_now (offset, pblock);
-      *poffset = offset;
-    }
-
   if (integer_zerop (or_expr))
     return size;
   if (integer_onep (or_expr))
@@ -6064,7 +6064,6 @@ gfc_array_allocate (gfc_se * se, gfc_expr * expr, tree 
status, tree errmsg,
 {
   tree tmp;
   tree pointer;
-  tree offset = NULL_TREE;
   tree token = NULL_TREE;
   tree size;
   tree msg;
@@ -6193,9 +6192,8 @@ gfc_array_allocate (gfc_se * se, gfc_expr * expr, tree 
status, tree errmsg,
   size = gfc_array_init_size (se->expr, alloc_w_e3_arr_spec ? expr->rank
                                                           : ref->u.ar.as->rank,
                              coarray ? ref->u.ar.as->corank : 0,
-                             &offset, lower, upper,
-                             &se->pre, &set_descriptor_block, &overflow,
-                             expr3_elem_size, expr3, e3_arr_desc,
+                             lower, upper, &se->pre, &set_descriptor_block,
+                             &overflow, expr3_elem_size, expr3, e3_arr_desc,
                              e3_has_nodescriptor, expr, element_size,
                              explicit_ts);
 
@@ -6333,14 +6331,6 @@ gfc_array_allocate (gfc_se * se, gfc_expr * expr, tree 
status, tree errmsg,
 
   gfc_add_expr_to_block (&se->pre, tmp);
 
-  /* Update the array descriptor with the offset and the span.  */
-  if (dimension)
-    {
-      gfc_conv_descriptor_offset_set (&set_descriptor_block, se->expr, offset);
-      tmp = fold_convert (gfc_array_index_type, element_size);
-      gfc_conv_descriptor_span_set (&set_descriptor_block, se->expr, tmp);
-    }
-
   set_descriptor = gfc_finish_block (&set_descriptor_block);
   if (status != NULL_TREE)
     {

Reply via email to