https://gcc.gnu.org/g:14977e9b3a33fc9c2e5f0073349d66bf7a9e8d28
commit 14977e9b3a33fc9c2e5f0073349d66bf7a9e8d28 Author: Mikael Morin <mik...@gcc.gnu.org> Date: Wed Apr 23 19:33:01 2025 +0200 Correction régression der_array_3 Diff: --- gcc/fortran/trans-array.cc | 11 ++++++----- gcc/fortran/trans-array.h | 2 ++ gcc/fortran/trans-io.cc | 2 ++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index f5b13d9effba..0b0fcb36c8ea 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -4154,12 +4154,13 @@ evaluate_bound (stmtblock_t *block, tree *bounds, gfc_expr ** values, } -static void -conv_array_lbound_spacing (stmtblock_t * block, gfc_ss * ss, int dim) +void +gfc_conv_array_lbound_spacing (stmtblock_t * block, gfc_ss * ss, int dim) { gfc_array_info *info; - gcc_assert (ss->info->type == GFC_SS_SECTION); + gcc_assert (ss->info->type == GFC_SS_SECTION + || ss->info->type == GFC_SS_COMPONENT); info = &ss->info->data.array; tree desc = info->descriptor; @@ -4511,13 +4512,13 @@ done: for (n = 0; n < ss->dimen; n++) { gfc_conv_section_startstride (&outer_loop->pre, ss, ss->dim[n]); - conv_array_lbound_spacing (&outer_loop->pre, ss, ss->dim[n]); + gfc_conv_array_lbound_spacing (&outer_loop->pre, ss, ss->dim[n]); } if (loop->parent == nullptr) for (n = 0; n < GFC_MAX_DIMENSIONS; n++) if (info->subscript[n] && info->subscript[n]->info->type == GFC_SS_SCALAR) - conv_array_lbound_spacing (&outer_loop->pre, ss, n); + gfc_conv_array_lbound_spacing (&outer_loop->pre, ss, n); break; case GFC_SS_INTRINSIC: diff --git a/gcc/fortran/trans-array.h b/gcc/fortran/trans-array.h index d52c1a859459..5b2c6ecffdb4 100644 --- a/gcc/fortran/trans-array.h +++ b/gcc/fortran/trans-array.h @@ -122,6 +122,8 @@ gfc_ss *gfc_get_scalar_ss (gfc_ss *, gfc_expr *); bool gfc_scalar_elemental_arg_saved_as_reference (gfc_ss_info *); +void gfc_conv_array_lbound_spacing (stmtblock_t *, gfc_ss *, int); + /* Calculates the lower bound and stride of array sections. */ void gfc_conv_ss_startstride (gfc_loopinfo *); diff --git a/gcc/fortran/trans-io.cc b/gcc/fortran/trans-io.cc index 147aff5f7118..f0f397de45dd 100644 --- a/gcc/fortran/trans-io.cc +++ b/gcc/fortran/trans-io.cc @@ -2199,6 +2199,8 @@ transfer_array_component (tree expr, gfc_component * cm, locus * where) cm->as->lower[n]->value.integer); mpz_add_ui (ss_array->shape[n], ss_array->shape[n], 1); } + + gfc_conv_array_lbound_spacing (&block, ss, n); } /* Once we got ss, we use scalarizer to create the loop. */