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
>

Reply via email to