https://gcc.gnu.org/g:f3db8650d423c0fa0c85be6a77e1649c63b06210
commit f3db8650d423c0fa0c85be6a77e1649c63b06210 Author: Mikael Morin <mik...@gcc.gnu.org> Date: Sat Aug 16 16:17:52 2025 +0200 Calcul offset sans passer par le descripteur Diff: --- gcc/fortran/trans-descriptor.cc | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc index ae387b684e8c..c0961ee1ab89 100644 --- a/gcc/fortran/trans-descriptor.cc +++ b/gcc/fortran/trans-descriptor.cc @@ -1425,7 +1425,7 @@ gfc_conv_remap_descriptor (stmtblock_t *block, tree dest, int dest_rank, /* Copy offset but adjust it such that it would correspond to a lbound of zero. */ - gfc_conv_descriptor_offset_set (block, dest, gfc_index_zero_node); + tree offset = gfc_index_zero_node; /* Set the bounds as declared for the LHS and calculate strides as well as another offset update accordingly. */ @@ -1476,17 +1476,15 @@ gfc_conv_remap_descriptor (stmtblock_t *block, tree dest, int dest_rank, gfc_conv_descriptor_stride_set (block, dest, gfc_rank_cst[dim], stride); /* Update offset. */ - tree offs = gfc_conv_descriptor_offset_get (dest); tree tmp = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type, lbound, stride); - offs = fold_build2_loc (input_location, MINUS_EXPR, - gfc_array_index_type, offs, tmp); - offs = gfc_evaluate_now (offs, block); - gfc_conv_descriptor_offset_set (block, dest, offs); + offset = fold_build2_loc (input_location, MINUS_EXPR, + gfc_array_index_type, offset, tmp); /* Update stride. */ tmp = gfc_conv_array_extent_dim (lbound, ubound, NULL); stride = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type, stride, tmp); } + gfc_conv_descriptor_offset_set (block, dest, offset); }