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

Reply via email to