https://gcc.gnu.org/g:3bbc9a1d5b27584f0af2df9da7e1974cd0ceb9e8

commit 3bbc9a1d5b27584f0af2df9da7e1974cd0ceb9e8
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 11f950aa9b90..f41b731eac86 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

Reply via email to