https://gcc.gnu.org/g:d1c9d409f93351c9cf46fee500734b630f6dffca
commit r17-5511-gd1c9d409f93351c9cf46fee500734b630f6dffca Author: Paul Thomas <[email protected]> Date: Fri Oct 23 15:01:28 2026 +0100 Fortran: [17-regession] pdt_bug9/10.f90 ICE after r17-5389 [PR128093] 2026-10-23 Paul Thomas <[email protected]> gcc/fortran PR fortran/128093 * trans-stmt.cc (gfc_trans_allocate): Move gfc_replace_expr to after deallocation of PDT components. Diff: --- gcc/fortran/trans-stmt.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gcc/fortran/trans-stmt.cc b/gcc/fortran/trans-stmt.cc index 65bf2ec9d930..60db7fdba067 100644 --- a/gcc/fortran/trans-stmt.cc +++ b/gcc/fortran/trans-stmt.cc @@ -7827,15 +7827,15 @@ gfc_trans_allocate (gfc_code * code, gfc_omp_namelist *omp_allocate) gfc_add_expr_to_block (&block, tmp); gfc_free_actual_arglist (init_expr->param_list); init_expr->param_list = NULL; - gfc_replace_expr (init_expr, var); /* Deallocate temporary PDT's allocatable components. */ if (var->symtree->n.sym->ts.u.derived->attr.alloc_comp) { + gfc_symbol *derived = var->symtree->n.sym->ts.u.derived; tree var_decl = gfc_get_symbol_decl (var->symtree->n.sym); - tmp = gfc_deallocate_pdt_comp (var->symtree->n.sym->ts.u.derived, - var_decl, 0); + tmp = gfc_deallocate_pdt_comp (derived, var_decl, 0); gfc_add_expr_to_block (&block, tmp); } + gfc_replace_expr (init_expr, var); } ini->expr2 = init_expr; tmp= gfc_trans_init_assign (ini);
