Skip to content

Commit d594566

Browse files
committed
Follow-up #46651 - Fix a slight logic bug
Found while testing bigger examples.
1 parent 62ac26a commit d594566

File tree

2 files changed

+31
-3
lines changed

2 files changed

+31
-3
lines changed

base/compiler/ssair/passes.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1148,8 +1148,8 @@ function try_resolve_finalizer!(ir::IRCode, idx::Int, finalizer_idx::Int, defuse
11481148
function note_block_use!(usebb::Int, useidx::Int)
11491149
new_bb_insert_block = nearest_common_dominator(get!(lazypostdomtree),
11501150
bb_insert_block, usebb)
1151-
if new_bb_insert_block == usebb
1152-
if usebb == bb_insert_block
1151+
if new_bb_insert_block == bb_insert_block == usebb
1152+
if bb_insert_idx !== nothing
11531153
bb_insert_idx = max(bb_insert_idx, useidx)
11541154
else
11551155
bb_insert_idx = useidx
@@ -1172,7 +1172,7 @@ function try_resolve_finalizer!(ir::IRCode, idx::Int, finalizer_idx::Int, defuse
11721172
bb = block_for_inst(ir, duidx)
11731173
# Not reachable from finalizer registration - we're ok
11741174
bb blocks && return true
1175-
note_block_use!(bb, idx)
1175+
note_block_use!(bb, duidx)
11761176
if dominates(domtree, finalizer_bb, bb)
11771177
return true
11781178
else

test/compiler/inline.jl

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1537,6 +1537,34 @@ let
15371537
@test get_finalization_count() == 1000
15381538
end
15391539

1540+
1541+
function cfg_finalization7(io)
1542+
for i = -999:1000
1543+
o = DoAllocWithField(0)
1544+
o.x = 0
1545+
if i == 1000
1546+
o.x = i # with `setfield!`
1547+
end
1548+
o.x = i
1549+
if i == 999
1550+
o.x = i
1551+
end
1552+
o.x = 0
1553+
if i == 1000
1554+
o.x = i
1555+
end
1556+
end
1557+
end
1558+
let src = code_typed1(cfg_finalization7, (IO,))
1559+
@test count(isinvoke(:add_finalization_count!), src.code) == 1
1560+
end
1561+
let
1562+
init_finalization_count!()
1563+
cfg_finalization7(IOBuffer())
1564+
@test get_finalization_count() == 1000
1565+
end
1566+
1567+
15401568
# optimize `[push!|pushfirst!](::Vector{Any}, x...)`
15411569
@testset "optimize `$f(::Vector{Any}, x...)`" for f = Any[push!, pushfirst!]
15421570
@eval begin

0 commit comments

Comments
 (0)