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) {