Hello Mikael, This patch is straightforward and LGTM.
Thanks Paul On Thu, 30 Oct 2025 at 20:37, Mikael Morin <[email protected]> wrote: > > From: Mikael Morin <[email protected]> > > Regression tested on powerpc64le-unknown-linux-gnu. OK for master? > > -- >8 -- > > Move gfc_grow_array, a descriptor growth function used in array constructor > descriptors initialisation, to trans-descriptor.cc. > > gcc/fortran/ChangeLog: > > * trans-array.cc (gfc_grow_array): Move function ... > * trans-descriptor.cc (gfc_grow_array): ... to this file. > * trans-descriptor.h (gfc_grow_array): Add declaration. > --- > gcc/fortran/trans-array.cc | 37 --------------------------------- > gcc/fortran/trans-descriptor.cc | 37 +++++++++++++++++++++++++++++++++ > gcc/fortran/trans-descriptor.h | 2 ++ > 3 files changed, 39 insertions(+), 37 deletions(-) > > diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc > index d26f3a47ebe..3c6609b6f40 100644 > --- a/gcc/fortran/trans-array.cc > +++ b/gcc/fortran/trans-array.cc > @@ -1407,43 +1407,6 @@ gfc_get_iteration_count (tree start, tree end, tree > step) > } > > > -/* Extend the data in array DESC by EXTRA elements. */ > - > -static void > -gfc_grow_array (stmtblock_t * pblock, tree desc, tree extra) > -{ > - tree arg0, arg1; > - tree tmp; > - tree size; > - tree ubound; > - > - if (integer_zerop (extra)) > - return; > - > - ubound = gfc_conv_descriptor_ubound_get (desc, gfc_rank_cst[0]); > - > - /* Add EXTRA to the upper bound. */ > - tmp = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type, > - ubound, extra); > - gfc_conv_descriptor_ubound_set (pblock, desc, gfc_rank_cst[0], tmp); > - > - /* Get the value of the current data pointer. */ > - arg0 = gfc_conv_descriptor_data_get (desc); > - > - /* Calculate the new array size. */ > - size = TYPE_SIZE_UNIT (gfc_get_element_type (TREE_TYPE (desc))); > - tmp = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type, > - ubound, gfc_index_one_node); > - arg1 = fold_build2_loc (input_location, MULT_EXPR, size_type_node, > - fold_convert (size_type_node, tmp), > - fold_convert (size_type_node, size)); > - > - /* Call the realloc() function. */ > - tmp = gfc_call_realloc (pblock, arg0, arg1); > - gfc_conv_descriptor_data_set (pblock, desc, tmp); > -} > - > - > /* Return true if the bounds of iterator I can only be determined > at run time. */ > > diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc > index 299d56c728a..386f6275982 100644 > --- a/gcc/fortran/trans-descriptor.cc > +++ b/gcc/fortran/trans-descriptor.cc > @@ -541,3 +541,40 @@ gfc_copy_descriptor (stmtblock_t *block, tree dst, tree > src, int rank) > > gfc_conv_descriptor_offset_set (block, dst, offset); > } > + > + > +/* Extend the data in array DESC by EXTRA elements. */ > + > +void > +gfc_grow_array (stmtblock_t * pblock, tree desc, tree extra) > +{ > + tree arg0, arg1; > + tree tmp; > + tree size; > + tree ubound; > + > + if (integer_zerop (extra)) > + return; > + > + ubound = gfc_conv_descriptor_ubound_get (desc, gfc_rank_cst[0]); > + > + /* Add EXTRA to the upper bound. */ > + tmp = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type, > + ubound, extra); > + gfc_conv_descriptor_ubound_set (pblock, desc, gfc_rank_cst[0], tmp); > + > + /* Get the value of the current data pointer. */ > + arg0 = gfc_conv_descriptor_data_get (desc); > + > + /* Calculate the new array size. */ > + size = TYPE_SIZE_UNIT (gfc_get_element_type (TREE_TYPE (desc))); > + tmp = fold_build2_loc (input_location, PLUS_EXPR, gfc_array_index_type, > + ubound, gfc_index_one_node); > + arg1 = fold_build2_loc (input_location, MULT_EXPR, size_type_node, > + fold_convert (size_type_node, tmp), > + fold_convert (size_type_node, size)); > + > + /* Call the realloc() function. */ > + tmp = gfc_call_realloc (pblock, arg0, arg1); > + gfc_conv_descriptor_data_set (pblock, desc, tmp); > +} > diff --git a/gcc/fortran/trans-descriptor.h b/gcc/fortran/trans-descriptor.h > index b1623a21803..816973825b6 100644 > --- a/gcc/fortran/trans-descriptor.h > +++ b/gcc/fortran/trans-descriptor.h > @@ -62,4 +62,6 @@ void gfc_conv_shift_descriptor_lbound (stmtblock_t*, tree, > int, tree); > > void gfc_copy_descriptor (stmtblock_t *, tree, tree, int); > > +void gfc_grow_array (stmtblock_t *, tree, tree); > + > #endif /* GFC_TRANS_DESCRIPTOR_H */ > -- > 2.51.0 >
