https://gcc.gnu.org/g:54c89b247a9277fd96c507e8f17d995438c39641
commit 54c89b247a9277fd96c507e8f17d995438c39641 Author: Mikael Morin <mik...@gcc.gnu.org> Date: Fri May 30 22:16:46 2025 +0200 Correction régression deferred_type_component_3 Diff: --- gcc/fortran/trans.cc | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/gcc/fortran/trans.cc b/gcc/fortran/trans.cc index a4793d602435..43a1f17e4fa0 100644 --- a/gcc/fortran/trans.cc +++ b/gcc/fortran/trans.cc @@ -1879,8 +1879,12 @@ gfc_deallocate_with_status (tree pointer, tree status, tree errmsg, omp_tmp, tmp); } gfc_add_expr_to_block (&non_null, tmp); - gfc_add_modify (&non_null, pointer, build_int_cst (TREE_TYPE (pointer), - 0)); + if (descr) + gfc_conv_descriptor_data_set (&non_null, descr, + build_int_cst (ptr_type_node, 0)); + else + gfc_add_modify (&non_null, pointer, + build_int_cst (TREE_TYPE (pointer), 0)); if (flag_openmp_allocators && descr) gfc_conv_descriptor_version_set (&non_null, descr, integer_zero_node); @@ -1946,10 +1950,19 @@ gfc_deallocate_with_status (tree pointer, tree status, tree errmsg, if (status != NULL_TREE) { tree stat = build_fold_indirect_ref_loc (input_location, status); - tree nullify = fold_build2_loc (input_location, MODIFY_EXPR, - void_type_node, pointer, - build_int_cst (TREE_TYPE (pointer), - 0)); + tree nullify; + if (descr) + { + stmtblock_t blk; + gfc_init_block (&blk); + gfc_conv_descriptor_data_set (&blk, descr, + build_int_cst (ptr_type_node, 0)); + nullify = gfc_finish_block (&blk); + } + else + nullify = fold_build2_loc (input_location, MODIFY_EXPR, + void_type_node, pointer, + build_int_cst (TREE_TYPE (pointer), 0)); TREE_USED (label_finish) = 1; tmp = build1_v (GOTO_EXPR, label_finish); @@ -1960,6 +1973,9 @@ gfc_deallocate_with_status (tree pointer, tree status, tree errmsg, tmp, nullify); gfc_add_expr_to_block (&non_null, tmp); } + else if (descr) + gfc_conv_descriptor_data_set (&non_null, descr, + build_int_cst (ptr_type_node, 0)); else gfc_add_modify (&non_null, pointer, build_int_cst (TREE_TYPE (pointer), 0));