[gcc(refs/users/mikael/heads/refactor_descriptor_v05)] Correction régression der_array_3

Mikael Morin mikael@gcc.gnu.org
Fri Jun 13 14:58:11 GMT 2025


https://gcc.gnu.org/g:6f503430f07cf170d1b30897e42c616ce47cb672

commit 6f503430f07cf170d1b30897e42c616ce47cb672
Author: Mikael Morin <mikael@gcc.gnu.org>
Date:   Wed Apr 23 19:33:01 2025 +0200

    Correction régression der_array_3

Diff:
---
 gcc/fortran/trans-array.cc | 11 ++++++-----
 gcc/fortran/trans-array.h  |  2 ++
 gcc/fortran/trans-io.cc    |  2 ++
 3 files changed, 10 insertions(+), 5 deletions(-)

diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index 6966151014a2..05b9512e9b1e 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -4154,12 +4154,13 @@ evaluate_bound (stmtblock_t *block, tree *bounds, gfc_expr ** values,
 }
 
 
-static void
-conv_array_lbound_spacing (stmtblock_t * block, gfc_ss * ss, int dim)
+void
+gfc_conv_array_lbound_spacing (stmtblock_t * block, gfc_ss * ss, int dim)
 {
   gfc_array_info *info;
 
-  gcc_assert (ss->info->type == GFC_SS_SECTION);
+  gcc_assert (ss->info->type == GFC_SS_SECTION
+	      || ss->info->type == GFC_SS_COMPONENT);
 
   info = &ss->info->data.array;
   tree desc = info->descriptor;
@@ -4511,13 +4512,13 @@ done:
 	  for (n = 0; n < ss->dimen; n++)
 	    {
 	      gfc_conv_section_startstride (&outer_loop->pre, ss, ss->dim[n]);
-	      conv_array_lbound_spacing (&outer_loop->pre, ss, ss->dim[n]);
+	      gfc_conv_array_lbound_spacing (&outer_loop->pre, ss, ss->dim[n]);
 	    }
 	  if (loop->parent == nullptr)
 	    for (n = 0; n < GFC_MAX_DIMENSIONS; n++)
 	      if (info->subscript[n]
 		  && info->subscript[n]->info->type == GFC_SS_SCALAR)
-		conv_array_lbound_spacing (&outer_loop->pre, ss, n);
+		gfc_conv_array_lbound_spacing (&outer_loop->pre, ss, n);
 	  break;
 
 	case GFC_SS_INTRINSIC:
diff --git a/gcc/fortran/trans-array.h b/gcc/fortran/trans-array.h
index d52c1a859459..5b2c6ecffdb4 100644
--- a/gcc/fortran/trans-array.h
+++ b/gcc/fortran/trans-array.h
@@ -122,6 +122,8 @@ gfc_ss *gfc_get_scalar_ss (gfc_ss *, gfc_expr *);
 
 bool gfc_scalar_elemental_arg_saved_as_reference (gfc_ss_info *);
 
+void gfc_conv_array_lbound_spacing (stmtblock_t *, gfc_ss *, int);
+
 /* Calculates the lower bound and stride of array sections.  */
 void gfc_conv_ss_startstride (gfc_loopinfo *);
 
diff --git a/gcc/fortran/trans-io.cc b/gcc/fortran/trans-io.cc
index 147aff5f7118..f0f397de45dd 100644
--- a/gcc/fortran/trans-io.cc
+++ b/gcc/fortran/trans-io.cc
@@ -2199,6 +2199,8 @@ transfer_array_component (tree expr, gfc_component * cm, locus * where)
 		   cm->as->lower[n]->value.integer);
 	  mpz_add_ui (ss_array->shape[n], ss_array->shape[n], 1);
 	}
+
+      gfc_conv_array_lbound_spacing (&block, ss, n);
     }
 
   /* Once we got ss, we use scalarizer to create the loop.  */


More information about the Gcc-cvs mailing list