@@ -1677,6 +1677,13 @@ function try_resolve_finalizer!(ir::IRCode, alloc_idx::Int, finalizer_idx::Int,
16771677 attach_after = insert_idx != = nothing
16781678 flag = info isa FinalizerInfo ? flags_for_effects (info. effects) : IR_FLAG_NULL
16791679 alloc_obj = finalizer_stmt. args[3 ]
1680+ cancel_registration = current_task_ssa != = nothing
1681+ if cancel_registration
1682+ lookup_idx_ssa = SSAValue (finalizer_idx)
1683+ finalize_call = Expr (:call , GlobalRef (Core, :_cancel_finalizer ), alloc_obj, current_task_ssa, lookup_idx_ssa)
1684+ newinst = add_flag (NewInstruction (finalize_call, Nothing), flag)
1685+ insert_node! (ir, loc, newinst, attach_after)
1686+ end
16801687 argexprs = Any[finalizer_stmt. args[2 ], alloc_obj]
16811688 if length (finalizer_stmt. args) >= 4
16821689 inline = finalizer_stmt. args[4 ]
@@ -1695,13 +1702,7 @@ function try_resolve_finalizer!(ir::IRCode, alloc_idx::Int, finalizer_idx::Int,
16951702 newinst = add_flag (NewInstruction (Expr (:call , argexprs... ), Nothing), flag)
16961703 insert_node! (ir, loc, newinst, attach_after)
16971704 end
1698- cancel_registration = current_task_ssa != = nothing
1699- if cancel_registration
1700- lookup_idx_ssa = SSAValue (finalizer_idx)
1701- finalize_call = Expr (:call , GlobalRef (Core, :_cancel_finalizer ), alloc_obj, current_task_ssa, lookup_idx_ssa)
1702- newinst = add_flag (NewInstruction (finalize_call, Nothing), flag)
1703- insert_node! (ir, loc, newinst, #= attach_after=# true )
1704- else
1705+ if ! cancel_registration
17051706 # Erase the call to `finalizer`
17061707 ir[SSAValue (finalizer_idx)][:stmt ] = nothing
17071708 end
0 commit comments