https://gcc.gnu.org/g:b6067a1b982c8c0519313fac52a9a8d075fdd949
commit b6067a1b982c8c0519313fac52a9a8d075fdd949 Author: Mikael Morin <[email protected]> Date: Tue Sep 30 15:13:21 2025 +0200 Renseignement bornes descripteurs coarrays. Diff: --- gcc/fortran/trans-descriptor.cc | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc index cf60f7383154..f610fb175f6f 100644 --- a/gcc/fortran/trans-descriptor.cc +++ b/gcc/fortran/trans-descriptor.cc @@ -1329,6 +1329,23 @@ gfc_set_descriptor_from_scalar (stmtblock_t *block, tree descr, tree scalar, gfc_conv_descriptor_data_set (block, descr, scalar); gfc_conv_descriptor_span_set (block, descr, gfc_conv_descriptor_elem_len_get (descr)); + + int corank = GFC_TYPE_ARRAY_CORANK (TREE_TYPE (descr)); + if (corank != 0) + { + tree type = TREE_TYPE (scalar); + if (POINTER_TYPE_P (type)) + type = TREE_TYPE (type); + gcc_assert (GFC_TYPE_ARRAY_CORANK (type) == corank); + for (int i = 0; i < corank; i++) + { + gfc_conv_descriptor_lbound_set (block, descr, i, + GFC_TYPE_ARRAY_LBOUND (type, i)); + if (i < corank - 1) + gfc_conv_descriptor_ubound_set (block, descr, i, + GFC_TYPE_ARRAY_UBOUND (type, i)); + } + } } @@ -1892,6 +1909,20 @@ gfc_copy_descriptor (stmtblock_t *block, tree dest, tree src) } gfc_conv_descriptor_offset_set (block, dest, offset); + gcc_assert (GFC_TYPE_ARRAY_CORANK (TREE_TYPE (src)) > 0 + || GFC_TYPE_ARRAY_CORANK (TREE_TYPE (dest)) == 0); + int corank = GFC_TYPE_ARRAY_CORANK (TREE_TYPE (dest)); + for (int i = 0; i < corank; i++) + { + tree lbound = gfc_conv_descriptor_lbound_get (src, i); + gfc_conv_descriptor_lbound_set (block, dest, i, lbound); + if (i < corank - 1) + { + tree ubound = gfc_conv_descriptor_ubound_get (src, i); + gfc_conv_descriptor_ubound_set (block, dest, i, ubound); + } + } + if (flag_coarray == GFC_FCOARRAY_LIB) gfc_conv_descriptor_token_set (block, dest, gfc_conv_descriptor_token (src));
