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

Reply via email to