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

commit c436d434d6aef59aa42f7790ce615f0dfaaf9f3f
Author: Mikael Morin <mik...@gcc.gnu.org>
Date:   Fri Apr 18 15:16:27 2025 +0200

    Correction régression finalize_25 (nombre itérations boucle)

Diff:
---
 gcc/fortran/class.cc | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/gcc/fortran/class.cc b/gcc/fortran/class.cc
index f7442f5c22ec..23d8701ac44f 100644
--- a/gcc/fortran/class.cc
+++ b/gcc/fortran/class.cc
@@ -2131,7 +2131,13 @@ generate_finalization_wrapper (gfc_symbol *derived, 
gfc_namespace *ns,
          iter = gfc_get_iterator ();
          iter->var = gfc_lval_expr_from_sym (idx);
          iter->start = gfc_get_int_expr (gfc_index_integer_kind, NULL, 0);
-         iter->end = gfc_lval_expr_from_sym (nelem);
+         iter->end = gfc_get_expr ();
+         iter->end->expr_type = EXPR_OP;
+         iter->end->where = gfc_current_locus;
+         iter->end->value.op.op = INTRINSIC_MINUS;
+         iter->end->value.op.op1 = gfc_lval_expr_from_sym (nelem);
+         iter->end->value.op.op2 = gfc_get_int_expr (gfc_index_integer_kind, 
NULL, 1);
+         iter->end->ts = iter->end->value.op.op1->ts;
          iter->step = gfc_get_int_expr (gfc_index_integer_kind, NULL, 1);
          block->next = gfc_get_code (EXEC_DO);
          block = block->next;
@@ -2196,7 +2202,13 @@ finish_assumed_rank:
       iter = gfc_get_iterator ();
       iter->var = gfc_lval_expr_from_sym (idx);
       iter->start = gfc_get_int_expr (gfc_index_integer_kind, NULL, 0);
-      iter->end = gfc_lval_expr_from_sym (nelem);
+      iter->end = gfc_get_expr ();
+      iter->end->expr_type = EXPR_OP;
+      iter->end->where = gfc_current_locus;
+      iter->end->value.op.op = INTRINSIC_MINUS;
+      iter->end->value.op.op1 = gfc_lval_expr_from_sym (nelem);
+      iter->end->value.op.op2 = gfc_get_int_expr (gfc_index_integer_kind, 
NULL, 1);
+      iter->end->ts = iter->end->value.op.op1->ts;
       iter->step = gfc_get_int_expr (gfc_index_integer_kind, NULL, 1);
       last_code->next = gfc_get_code (EXEC_DO);
       last_code = last_code->next;

Reply via email to