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); }