[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