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

commit cfd4493b5bb51383cf36d107841c4317b9462204
Author: Mikael Morin <[email protected]>
Date:   Mon Sep 22 12:19:34 2025 +0200

    Correctior régression ltime_gmtime_2

Diff:
---
 gcc/fortran/trans-array.cc | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index ea8d39deeb8f..027d50a193ec 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -7204,8 +7204,7 @@ gfc_get_dataptr_offset (stmtblock_t *block, tree parm, 
tree desc, tree offset,
   gfc_init_se (&se, nullptr);
   build_array_ref (&se, desc, expr, gfc_find_array_ref (expr, false), offset);
   gfc_add_block_to_block (block, &se.pre);
-  tmp = gfc_evaluate_now (se.expr, block);
-  gfc_add_block_to_block (block, &se.post);
+  tmp = se.expr;
 
   /* Offset the data pointer for pointer assignments from arrays with
      subreferences; e.g. my_integer => my_type(:)%integer_component.  */
@@ -7313,6 +7312,11 @@ gfc_get_dataptr_offset (stmtblock_t *block, tree parm, 
tree desc, tree offset,
 
   /* Set the target data pointer.  */
   offset = gfc_build_addr_expr (gfc_array_dataptr_type (desc), tmp);
+  if (se.post.head != NULL_TREE)
+    {
+      offset = gfc_evaluate_now (offset, block);
+      gfc_add_block_to_block (block, &se.post);
+    }
 
   /* Check for optional dummy argument being present.  Arguments of BIND(C)
      procedures are excepted here since they are handled differently.  */

Reply via email to