https://gcc.gnu.org/g:ac595ff23d46a664d60e76a640f7ca1dc2a99d11

commit ac595ff23d46a664d60e76a640f7ca1dc2a99d11
Author: Mikael Morin <mik...@gcc.gnu.org>
Date:   Mon Feb 10 21:50:03 2025 +0100

    Correction régression realloc on assign (associate_61, ...)

Diff:
---
 gcc/fortran/trans-array.cc | 17 ++++-------------
 1 file changed, 4 insertions(+), 13 deletions(-)

diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index 5e9f487615d3..f0dadfbe58fc 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -13664,12 +13664,7 @@ gfc_alloc_allocatable_for_assignment (gfc_loopinfo 
*loop,
   size2 = gfc_index_one_node;
   for (n = 0; n < expr2->rank; n++)
     {
-      tmp = fold_build2_loc (input_location, MINUS_EXPR,
-                            gfc_array_index_type,
-                            loop->to[n], loop->from[n]);
-      tmp = fold_build2_loc (input_location, PLUS_EXPR,
-                            gfc_array_index_type,
-                            tmp, gfc_index_one_node);
+      tmp = gfc_conv_array_extent_dim (loop->from[n], loop->to[n], NULL);
       size2 = fold_build2_loc (input_location, MULT_EXPR,
                               gfc_array_index_type,
                               tmp, size2);
@@ -13697,12 +13692,7 @@ gfc_alloc_allocatable_for_assignment (gfc_loopinfo 
*loop,
 
   for (n = 0; n < expr2->rank; n++)
     {
-      tmp = fold_build2_loc (input_location, MINUS_EXPR,
-                            gfc_array_index_type,
-                            loop->to[n], loop->from[n]);
-      tmp = fold_build2_loc (input_location, PLUS_EXPR,
-                            gfc_array_index_type,
-                            tmp, gfc_index_one_node);
+      tmp = gfc_conv_array_extent_dim (loop->from[n], loop->to[n], NULL);
 
       lbound = gfc_index_one_node;
       ubound = tmp;
@@ -13750,7 +13740,8 @@ gfc_alloc_allocatable_for_assignment (gfc_loopinfo 
*loop,
   gfc_conv_descriptor_offset_set (&fblock, desc, offset);
   if (linfo->saved_offset
       && VAR_P (linfo->saved_offset))
-    gfc_add_modify (&fblock, linfo->saved_offset, tmp);
+    gfc_add_modify (&fblock, linfo->saved_offset,
+                   gfc_conv_descriptor_offset_get (desc));
 
   /* Now set the deltas for the lhs.  */
   for (n = 0; n < expr1->rank; n++)

Reply via email to