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

commit fb23bc7bc9dd01f86a5cfed7841e8616a832ad8c
Author: Mikael Morin <mik...@gcc.gnu.org>
Date:   Tue Apr 29 13:56:18 2025 +0200

    Correction régression matmul_bounds_20

Diff:
---
 gcc/fortran/trans-array.cc | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index 3c28052afb85..b931184a3c40 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -2813,6 +2813,39 @@ gfc_add_loop_ss_code (gfc_loopinfo * loop, gfc_ss * ss, 
bool subscript,
                      info->spacing[dim] = spacing;
                    }
              }
+           else
+             {
+               bool missing_spacing;
+               for (int n = 0; n < ss_info->expr->rank; n++)
+                 if (info->spacing[n] == NULL_TREE)
+                   {
+                     missing_spacing = true;
+                     break;
+                   }
+               if (missing_spacing
+                   && ss_info->expr->ts.type != BT_CLASS)
+                 {
+                   tree type = gfc_typenode_for_spec (&ss_info->expr->ts);
+                   tree spacing = fold_convert_loc (input_location,
+                                                    gfc_array_index_type, 
+                                                    TYPE_SIZE_UNIT (type));
+                   spacing = gfc_evaluate_now (spacing, &outer_loop->pre);
+
+                   for (n = 0; n < ss_info->expr->rank; n++)
+                     {
+                       info->spacing[n] = spacing;
+
+                       tree extent = gfc_conv_descriptor_extent_get 
(info->descriptor,
+                                                                     
gfc_rank_cst[n]);
+
+                       spacing = fold_build2_loc (input_location, MULT_EXPR,
+                                                  gfc_array_index_type, 
spacing,
+                                                  extent);
+                       spacing = gfc_evaluate_now (spacing, &outer_loop->pre);
+                     }
+                 }
+             }
+
            gfc_add_block_to_block (&outer_loop->post, &se.post);
            gfc_add_block_to_block (&outer_loop->post, &se.finalblock);
            ss_info->string_length = se.string_length;

Reply via email to