https://gcc.gnu.org/g:bb3569f12081bcddac3c346360b3ab925c2c50a1
commit bb3569f12081bcddac3c346360b3ab925c2c50a1 Author: Mikael Morin <mik...@gcc.gnu.org> Date: Mon May 26 22:49:46 2025 +0200 Correction régression assign_10 Diff: --- gcc/fortran/trans-array.cc | 2 +- gcc/fortran/trans-descriptor.cc | 10 +++++++++- gcc/fortran/trans-descriptor.h | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index c0a550fd8c5e..b5cd1e9c385a 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -7944,7 +7944,7 @@ gfc_conv_expr_descriptor (gfc_se *se, gfc_expr *expr) gfc_set_descriptor (&loop.pre, parm, desc, expr, loop.dimen, codim, ss, info, loop.from, loop.to, !se->data_not_needed, - subref_array_target); + subref_array_target, !se->direct_byref); desc = parm; } diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc index 4bb22f436e90..01d88ec9ea1b 100644 --- a/gcc/fortran/trans-descriptor.cc +++ b/gcc/fortran/trans-descriptor.cc @@ -2977,6 +2977,9 @@ gfc_set_temporary_descriptor (stmtblock_t *block, tree desc, tree class_src, tree this_lbound = shift_bounds ? gfc_index_zero_node : lbound[n]; set_descriptor_dimension (block, desc, n, this_lbound, ubound[n], spacing[n], &offset, nullptr); + if (TREE_CODE (spacing[n]) == INTEGER_CST + && GFC_TYPE_ARRAY_SPACING (TREE_TYPE (desc), n) == NULL_TREE) + GFC_TYPE_ARRAY_SPACING (TREE_TYPE (desc), n) = spacing[n]; } } @@ -3046,7 +3049,7 @@ gfc_set_descriptor (stmtblock_t *block, tree dest, tree src, gfc_expr *src_expr, int rank, int corank, gfc_ss *ss, gfc_array_info *info, tree lowers[GFC_MAX_DIMENSIONS], tree uppers[GFC_MAX_DIMENSIONS], bool data_needed, - bool subref) + bool subref, bool update_spacing_in_type) { int ndim = info->ref ? info->ref->u.ar.dimen : rank; @@ -3160,6 +3163,11 @@ gfc_set_descriptor (stmtblock_t *block, tree dest, tree src, gfc_expr *src_expr, offset = fold_build2_loc (input_location, MINUS_EXPR, TREE_TYPE (offset), offset, tmp); + if (update_spacing_in_type + && TREE_CODE (spacing) == INTEGER_CST + && GFC_TYPE_ARRAY_SPACING (TREE_TYPE (dest), dim) == NULL_TREE) + GFC_TYPE_ARRAY_SPACING (TREE_TYPE (dest), dim) = spacing; + /* Store the new spacing. */ gfc_conv_descriptor_spacing_set (block, dest, gfc_rank_cst[dim], spacing); } diff --git a/gcc/fortran/trans-descriptor.h b/gcc/fortran/trans-descriptor.h index f648ae131129..bff9a9e7b35a 100644 --- a/gcc/fortran/trans-descriptor.h +++ b/gcc/fortran/trans-descriptor.h @@ -94,7 +94,7 @@ void gfc_set_temporary_descriptor (stmtblock_t *, tree, tree, tree, tree, void gfc_set_descriptor (stmtblock_t *, tree, tree, gfc_expr *, int, int, gfc_ss *, gfc_array_info *, tree [GFC_MAX_DIMENSIONS], - tree [GFC_MAX_DIMENSIONS], bool, bool); + tree [GFC_MAX_DIMENSIONS], bool, bool, bool); tree gfc_descr_init_count (tree, int, int, gfc_expr **, gfc_expr **, stmtblock_t *, stmtblock_t *, tree *, tree,