https://gcc.gnu.org/g:cde260612fa96886c1ba427ea70e7c3b3b52ff2c
commit cde260612fa96886c1ba427ea70e7c3b3b52ff2c Author: Mikael Morin <[email protected]> Date: Thu Oct 30 14:40:08 2025 +0100 fortran: array descriptor: Use the setter to modify the offset 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 3c6609b6f40f..e164b982e069 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -11586,8 +11586,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);
