https://gcc.gnu.org/g:0ce9f3a53df42f50a4b63d645eaec1971dd437c4
commit 0ce9f3a53df42f50a4b63d645eaec1971dd437c4 Author: Mikael Morin <[email protected]> Date: Thu Oct 30 14:40:08 2025 +0100 fortran: array descriptor: Use the setter to modify the offset Regression tested on powerpc64le-unknown-linux-gnu. OK for master? -- >8 -- Use the setter function to generate code modifying the array descriptor offset and remove from the public API the function giving direct access to that field. gcc/fortran/ChangeLog: * trans-array.cc (gfc_alloc_allocatable_for_assignment): Use the setter function to generate a modification of the array descriptor offset. * trans-descriptor.cc (gfc_conv_descriptor_offset): Make static and rename ... (conv_descriptor_offset): ... to this. (gfc_conv_descriptor_offset_get, gfc_conv_descriptor_offset_set): Update callers. * trans-descriptor.h (gfc_conv_descriptor_offset): Remove declaration. Diff: --- gcc/fortran/trans-array.cc | 3 +-- gcc/fortran/trans-descriptor.cc | 8 ++++---- gcc/fortran/trans-descriptor.h | 1 - 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index dbb95c9b7a05..81936b23e970 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -11781,8 +11781,7 @@ gfc_alloc_allocatable_for_assignment (gfc_loopinfo *loop, /* Set the lhs descriptor and scalarizer offsets. For rank > 1, the array offset is saved and the info.offset is used for a running offset. Use the saved_offset instead. */ - tmp = gfc_conv_descriptor_offset (desc); - gfc_add_modify (&fblock, tmp, offset); + gfc_conv_descriptor_offset_set (&fblock, desc, offset); /* Take into account _len of unlimited polymorphic entities, so that span for array descriptors and allocation sizes are computed correctly. */ diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc index 386f62759824..5286d3d54ecd 100644 --- a/gcc/fortran/trans-descriptor.cc +++ b/gcc/fortran/trans-descriptor.cc @@ -98,8 +98,8 @@ gfc_conv_descriptor_data_set (stmtblock_t *block, tree desc, tree value) } -tree -gfc_conv_descriptor_offset (tree desc) +static tree +conv_descriptor_offset (tree desc) { tree field = gfc_get_descriptor_field (desc, OFFSET_FIELD); gcc_assert (TREE_TYPE (field) == gfc_array_index_type); @@ -109,13 +109,13 @@ gfc_conv_descriptor_offset (tree desc) tree gfc_conv_descriptor_offset_get (tree desc) { - return gfc_conv_descriptor_offset (desc); + return conv_descriptor_offset (desc); } void gfc_conv_descriptor_offset_set (stmtblock_t *block, tree desc, tree value) { - tree t = gfc_conv_descriptor_offset (desc); + tree t = conv_descriptor_offset (desc); gfc_add_modify (block, t, fold_convert (TREE_TYPE (t), value)); } diff --git a/gcc/fortran/trans-descriptor.h b/gcc/fortran/trans-descriptor.h index 816973825b65..b68a28bddffe 100644 --- a/gcc/fortran/trans-descriptor.h +++ b/gcc/fortran/trans-descriptor.h @@ -29,7 +29,6 @@ tree gfc_conv_descriptor_type (tree); tree gfc_get_descriptor_dimension (tree); tree gfc_conv_descriptor_dimension (tree, tree); tree gfc_conv_descriptor_token (tree); -tree gfc_conv_descriptor_offset (tree); tree gfc_conv_descriptor_data_get (tree); tree gfc_conv_descriptor_offset_get (tree);
