https://gcc.gnu.org/g:55352b210e2c3eeee315977cfc697d731fde1576

commit 55352b210e2c3eeee315977cfc697d731fde1576
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 | 34 ++++++++++++----------------------
 1 file changed, 12 insertions(+), 22 deletions(-)

diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index 00b749196446..9300bba7ec10 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -8354,8 +8354,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, tree *nelems, gfc_expr *expr3,
                     tree expr3_desc, bool e3_has_nodescriptor, gfc_expr *expr,
@@ -8597,6 +8597,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);
+
   *nelems = gfc_evaluate_now (stride, pblock);
   stride = fold_convert (size_type_node, stride);
 
@@ -8624,12 +8630,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))
@@ -8692,7 +8692,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;
@@ -8821,11 +8820,10 @@ 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, nelems, expr3, e3_arr_desc,
-                             e3_has_nodescriptor, expr, element_size,
-                             explicit_ts);
+                             lower, upper, &se->pre, &set_descriptor_block,
+                             &overflow, expr3_elem_size, nelems, expr3,
+                             e3_arr_desc, e3_has_nodescriptor, expr,
+                             element_size, explicit_ts);
 
   if (dimension)
     {
@@ -8962,14 +8960,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