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

commit 3e76083a905ecb6cde6511d1536ada00e16c853a
Author: Mikael Morin <mik...@gcc.gnu.org>
Date:   Sun Jul 6 16:56:16 2025 +0200

    Essai déplacement

Diff:
---
 gcc/fortran/trans-array.cc |  3 ---
 gcc/fortran/trans-expr.cc  | 20 +++++++++++---------
 2 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index 7be2d7b11a62..b7040bb7e6c9 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -11736,9 +11736,6 @@ gfc_alloc_allocatable_for_assignment (gfc_loopinfo 
*loop,
      running offset.  Use the saved_offset instead.  */
   tmp = gfc_conv_descriptor_offset (desc);
   gfc_add_modify (&fblock, tmp, offset);
-  if (linfo->saved_offset
-      && VAR_P (linfo->saved_offset))
-    gfc_add_modify (&fblock, linfo->saved_offset, tmp);
 
   /* Now set the deltas for the lhs.  */
   for (n = 0; n < expr1->rank; n++)
diff --git a/gcc/fortran/trans-expr.cc b/gcc/fortran/trans-expr.cc
index 3e0d763d2fb0..65d0ee4ff235 100644
--- a/gcc/fortran/trans-expr.cc
+++ b/gcc/fortran/trans-expr.cc
@@ -12943,6 +12943,7 @@ gfc_trans_assignment_1 (gfc_expr * expr1, gfc_expr * 
expr2, bool init_flag,
       rhs_caf_attr = gfc_caf_attr (expr2, false, &rhs_refs_comp);
     }
 
+  tree reallocation = NULL_TREE;
   if (lss != gfc_ss_terminator)
     {
       /* The assignment needs scalarization.  */
@@ -13011,6 +13012,14 @@ gfc_trans_assignment_1 (gfc_expr * expr1, gfc_expr * 
expr2, bool init_flag,
          ompws_flags |= OMPWS_SCALARIZER_WS | OMPWS_SCALARIZER_BODY;
        }
 
+      /* F2003: Allocate or reallocate lhs of allocatable array.  */
+      if (realloc_flag)
+       {
+         realloc_lhs_warning (expr1->ts.type, true, &expr1->where);
+         ompws_flags &= ~OMPWS_SCALARIZER_WS;
+         reallocation = gfc_alloc_allocatable_for_assignment (&loop, expr1, 
expr2);
+       }
+
       /* Start the scalarized loop body.  */
       gfc_start_scalarized_body (&loop, &body);
     }
@@ -13319,15 +13328,8 @@ gfc_trans_assignment_1 (gfc_expr * expr1, gfc_expr * 
expr2, bool init_flag,
          gfc_add_expr_to_block (&body, tmp);
        }
 
-      /* F2003: Allocate or reallocate lhs of allocatable array.  */
-      if (realloc_flag)
-       {
-         realloc_lhs_warning (expr1->ts.type, true, &expr1->where);
-         ompws_flags &= ~OMPWS_SCALARIZER_WS;
-         tmp = gfc_alloc_allocatable_for_assignment (&loop, expr1, expr2);
-         if (tmp != NULL_TREE)
-           gfc_add_expr_to_block (&loop.code[expr1->rank - 1], tmp);
-       }
+      if (reallocation != NULL_TREE)
+       gfc_add_expr_to_block (&loop.code[loop.dimen - 1], reallocation);
 
       if (maybe_workshare)
        ompws_flags &= ~OMPWS_SCALARIZER_BODY;

Reply via email to