https://gcc.gnu.org/g:8b3a3bdc5f90cc7056b821afba41f4d1471654d8
commit 8b3a3bdc5f90cc7056b821afba41f4d1471654d8 Author: Mikael Morin <mik...@gcc.gnu.org> Date: Thu Jan 30 21:30:12 2025 +0100 Correction compil' Diff: --- gcc/fortran/trans-array.cc | 40 ++++++++++++++++++++-------------------- gcc/fortran/trans-array.h | 1 + 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index 66c2932deb81..d6e7c9829ff2 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -1466,6 +1466,26 @@ gfc_conv_shift_descriptor_subarray (stmtblock_t *block, tree desc, } +int +gfc_descriptor_rank (tree descriptor) +{ + if (TREE_TYPE (descriptor) != NULL_TREE) + return GFC_TYPE_ARRAY_RANK (TREE_TYPE (descriptor)); + + tree dim = gfc_get_descriptor_dimension (descriptor); + tree dim_type = TREE_TYPE (dim); + gcc_assert (TREE_CODE (dim_type) == ARRAY_TYPE); + tree idx_type = TYPE_DOMAIN (dim_type); + gcc_assert (TREE_CODE (idx_type) == INTEGER_TYPE); + gcc_assert (integer_zerop (TYPE_MIN_VALUE (idx_type))); + tree idx_max = TYPE_MAX_VALUE (idx_type); + if (idx_max == NULL_TREE) + return GFC_MAX_DIMENSIONS; + wide_int max = wi::to_wide (idx_max); + return max.to_shwi () + 1; +} + + void gfc_conv_remap_descriptor (stmtblock_t *block, tree dest, tree src, int src_rank, const gfc_array_spec &as) @@ -1835,26 +1855,6 @@ gfc_set_descriptor_from_scalar (stmtblock_t *block, tree desc, tree scalar, gfc_conv_descriptor_data_set (block, desc, tmp); } -int -gfc_descriptor_rank (tree descriptor) -{ - if (TREE_TYPE (descriptor) != NULL_TREE) - return GFC_TYPE_ARRAY_RANK (TREE_TYPE (descriptor)); - - tree dim = gfc_get_descriptor_dimension (descriptor); - tree dim_type = TREE_TYPE (dim); - gcc_assert (TREE_CODE (dim_type) == ARRAY_TYPE); - tree idx_type = TYPE_DOMAIN (dim_type); - gcc_assert (TREE_CODE (idx_type) == INTEGER_TYPE); - gcc_assert (integer_zerop (TYPE_MIN_VALUE (idx_type))); - tree idx_max = TYPE_MAX_VALUE (idx_type); - if (idx_max == NULL_TREE) - return GFC_MAX_DIMENSIONS; - wide_int max = wi::to_wide (idx_max); - return max.to_shwi () + 1; -} - - void gfc_copy_sequence_descriptor (stmtblock_t &block, tree lhs_desc, tree rhs_desc, bool assumed_rank_lhs) diff --git a/gcc/fortran/trans-array.h b/gcc/fortran/trans-array.h index e415568005d6..a4e49ba705ee 100644 --- a/gcc/fortran/trans-array.h +++ b/gcc/fortran/trans-array.h @@ -153,6 +153,7 @@ void gfc_set_descriptor_from_scalar (stmtblock_t *, tree, tree, void gfc_copy_sequence_descriptor (stmtblock_t &, tree, tree, bool); void gfc_set_gfc_from_cfi (stmtblock_t *, stmtblock_t *, tree, tree, tree, gfc_symbol *, bool, bool, bool); +int gfc_descriptor_rank (tree); /* Get a single array element. */ void gfc_conv_array_ref (gfc_se *, gfc_array_ref *, gfc_expr *, locus *);