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

commit d64d1638a467940f12a9c323e5b74b1b52e96d3a
Author: Mikael Morin <[email protected]>
Date:   Tue Oct 7 18:25:03 2025 +0200

    Correction régression pointer_remapping_5.f08

Diff:
---
 gcc/fortran/trans-descriptor.cc | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/gcc/fortran/trans-descriptor.cc b/gcc/fortran/trans-descriptor.cc
index 8b04f7296512..039af2190d0c 100644
--- a/gcc/fortran/trans-descriptor.cc
+++ b/gcc/fortran/trans-descriptor.cc
@@ -2137,6 +2137,7 @@ gfc_conv_remap_descriptor (stmtblock_t *block, tree dest, 
int dest_rank,
       tmp = TYPE_SIZE_UNIT (gfc_get_element_type (tmp));
       span = fold_convert (gfc_array_index_type, tmp);
     }
+  span = gfc_evaluate_now (span, block);
   gfc_conv_descriptor_span_set (block, dest, span);
 
   /* Copy offset but adjust it such that it would correspond
@@ -2146,10 +2147,12 @@ gfc_conv_remap_descriptor (stmtblock_t *block, tree 
dest, int dest_rank,
   /* Set the bounds as declared for the LHS and calculate strides as
      well as another offset update accordingly.  */
   tree stride;
-  if (contiguous_src)
-    stride = gfc_index_one_node;
-  else
+  if (!contiguous_src)
     stride = gfc_conv_descriptor_stride_bytes_get (src, gfc_rank_cst[0]);
+  else if (GFC_BYTES_STRIDES_ARRAY_TYPE_P (TREE_TYPE (dest)))
+    stride = span;
+  else
+    stride = gfc_index_one_node;
 
   for (int dim = 0; dim < dest_rank; ++dim)
     {

Reply via email to