https://gcc.gnu.org/g:d71f8e0b6ffa0348c3de21d6b353a71dad1ecb67
commit d71f8e0b6ffa0348c3de21d6b353a71dad1ecb67 Author: Mikael Morin <mik...@gcc.gnu.org> Date: Tue Sep 23 21:08:11 2025 +0200 Sauvegarde modif Diff: --- gcc/fortran/trans-array.cc | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index bb0394f52bba..ff4751767693 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -3891,13 +3891,19 @@ build_array_ref (gfc_se *se, tree array, tree ref_base, gfc_expr *expr, || (expr && expr->ts.deferred && array && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (array)))) { - if (TREE_CODE (array) == COMPONENT_REF) - decl = array; - else if (INDIRECT_REF_P (array)) - decl = TREE_OPERAND (array, 0); - - if (decl == NULL_TREE) - decl = array; + decl = array; + if (INDIRECT_REF_P (decl) + && !GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (decl))) + decl = TREE_OPERAND (decl, 0); + + if (DECL_P (decl) + && DECL_LANG_SPECIFIC (decl) + && GFC_DECL_SAVED_DESCRIPTOR (decl)) + decl = GFC_DECL_SAVED_DESCRIPTOR (decl); + + if (POINTER_TYPE_P (TREE_TYPE (decl)) + && GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (TREE_TYPE (decl)))) + decl = build_fold_indirect_ref_loc (input_location, decl); } bool non_negative_stride = is_temp_array