https://gcc.gnu.org/g:84488c6956d90cbf8e2c60ce754dd5e13025e46c
commit 84488c6956d90cbf8e2c60ce754dd5e13025e46c Author: Mikael Morin <mik...@gcc.gnu.org> Date: Thu Mar 6 19:32:28 2025 +0100 Correction régression alloc_comp_assign_12 etc Diff: --- gcc/fortran/trans-array.cc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/gcc/fortran/trans-array.cc b/gcc/fortran/trans-array.cc index 2d6519f8b0b6..480df9829dec 100644 --- a/gcc/fortran/trans-array.cc +++ b/gcc/fortran/trans-array.cc @@ -5713,6 +5713,24 @@ gfc_conv_ss_descriptor (stmtblock_t * block, gfc_ss * ss, int base) gfc_conv_expr_lhs (&se, ss_info->expr); gfc_add_block_to_block (block, &se.pre); info->descriptor = se.expr; + if (TREE_CODE (info->descriptor) == INDIRECT_REF) + { + tree ptr = TREE_OPERAND (info->descriptor, 0); + ptr = gfc_evaluate_now (ptr, block); + TREE_OPERAND (info->descriptor, 0) = ptr; + } + else if (TREE_CODE (info->descriptor) == COMPONENT_REF) + { + tree parent_ref = TREE_OPERAND (info->descriptor, 0); + tree parent_ptr_type = build_pointer_type (TREE_TYPE (parent_ref)); + tree ptr = fold_build1_loc (input_location, ADDR_EXPR, + parent_ptr_type, parent_ref); + ptr = gfc_evaluate_now (ptr, block); + tree deref = fold_build1_loc (input_location, INDIRECT_REF, + TREE_TYPE (parent_ref), + ptr); + TREE_OPERAND (info->descriptor, 0) = deref; + } ss_info->string_length = se.string_length; ss_info->class_container = se.class_container;