https://gcc.gnu.org/g:5373fc616e71ce297fd2e5a017700cab0d4e8910

commit 5373fc616e71ce297fd2e5a017700cab0d4e8910
Author: Mikael Morin <mik...@gcc.gnu.org>
Date:   Tue Feb 4 18:36:28 2025 +0100

    Correction régression pr86470.f90

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

diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc
index f3322af9157c..32e03509b8c6 100644
--- a/gcc/fortran/trans-array.cc
+++ b/gcc/fortran/trans-array.cc
@@ -92,6 +92,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "trans-array.h"
 #include "trans-const.h"
 #include "dependency.h"
+#include "gimplify.h"
 
 static bool gfc_get_array_constructor_size (mpz_t *, gfc_constructor_base);
 
@@ -1163,7 +1164,8 @@ init_struct (stmtblock_t *block, tree data_ref, init_kind 
kind,
          FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (value), i, field, 
field_init)
            {
              tree ref = fold_build3_loc (input_location, COMPONENT_REF,
-                                         TREE_TYPE (field), data_ref,
+                                         TREE_TYPE (field),
+                                         unshare_expr (data_ref),
                                          field, NULL_TREE);
              init_struct (block, ref, field_init);
            }
@@ -1184,7 +1186,8 @@ init_struct (stmtblock_t *block, tree data_ref, init_kind 
kind,
        {
          tree field_decl = ce->index;
          tree ref = fold_build3_loc (input_location, COMPONENT_REF,
-                                     TREE_TYPE (field_decl), data_ref,
+                                     TREE_TYPE (field_decl),
+                                     unshare_expr (data_ref),
                                      field_decl, NULL_TREE);
          init_struct (block, ref, ce->value);
        }

Reply via email to