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

commit b620c02504970530d55b922936e9a25101e6ee24
Author: Mikael Morin <mik...@gcc.gnu.org>
Date:   Sat Aug 16 18:19:27 2025 +0200

    Factorisation set_dimension_fields gfc_set_descriptor_with_shape
    
    Correction régression c_f_pointer_tests_4

Diff:
---
 gcc/fortran/trans-descriptor.cc | 18 ++++--------------
 1 file changed, 4 insertions(+), 14 deletions(-)

diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc
index b9dd3f6ca8e7..3bbdbc688691 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -2008,15 +2008,12 @@ gfc_set_descriptor_with_shape (stmtblock_t *block, tree 
desc, tree ptr,
       gfc_conv_expr (&lowerse, lower);
       gfc_add_block_to_block (&body, &lowerse.pre);
       lbound = fold_convert (gfc_array_index_type, lowerse.expr);
+      lbound = gfc_evaluate_now (lbound, &body);
       gfc_add_block_to_block (&body, &lowerse.post);
     }
   else
     lbound = gfc_index_one_node;
 
-  /* Set bounds and stride.  */
-  gfc_conv_descriptor_lbound_set (&body, desc, dim, lbound);
-  gfc_conv_descriptor_stride_set (&body, desc, dim, stride);
-
   gfc_conv_expr (&shapese, shape);
   gfc_add_block_to_block (&body, &shapese.pre);
   tree shapeval = fold_convert (gfc_array_index_type, shapese.expr);
@@ -2025,29 +2022,22 @@ gfc_set_descriptor_with_shape (stmtblock_t *block, tree 
desc, tree ptr,
                         lbound, gfc_index_one_node);
   tree ubound = fold_build2_loc (input_location, PLUS_EXPR,
                                 gfc_array_index_type, tmp, shapeval);
-  gfc_conv_descriptor_ubound_set (&body, desc, dim, ubound);
+  ubound = gfc_evaluate_now (ubound, &body);
   gfc_add_block_to_block (&body, &shapese.post);
 
-  /* Calculate offset.  */
-  tmp = fold_build2_loc (input_location, MULT_EXPR, gfc_array_index_type,
-                        stride, lbound);
-  gfc_add_modify (&body, offset,
-                 fold_build2_loc (input_location, PLUS_EXPR,
-                                  gfc_array_index_type, offset, tmp));
+  set_dimension_fields (&body, desc, dim, lbound, ubound, stride, offset);
 
   /* Update stride.  */
   gfc_add_modify (&body, stride,
                  fold_build2_loc (input_location, MULT_EXPR,
                                   gfc_array_index_type, stride, shapeval));
+
   /* Finish scalarization loop.  */
   gfc_trans_scalarizing_loops (&loop, &body);
   gfc_add_block_to_block (block, &loop.pre);
   gfc_add_block_to_block (block, &loop.post);
   gfc_cleanup_loop (&loop);
 
-  gfc_add_modify (block, offset,
-                 fold_build1_loc (input_location, NEGATE_EXPR,
-                                  gfc_array_index_type, offset));
   gfc_conv_descriptor_offset_set (block, desc, offset);
 }

Reply via email to