From 50cbe1468130ffa3fe340560ad7754fc5abcd477 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki Date: Thu, 8 Feb 2024 19:30:58 +0900 Subject: [PATCH] handle unassigned `PhiNode` values in `find_ssavalue_uses` --- base/compiler/utilities.jl | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/base/compiler/utilities.jl b/base/compiler/utilities.jl index 368395e714054..806ad4a0a2464 100644 --- a/base/compiler/utilities.jl +++ b/base/compiler/utilities.jl @@ -415,15 +415,15 @@ function find_ssavalue_uses(body::Vector{Any}, nvals::Int) if isa(e, SSAValue) push!(uses[e.id], line) elseif isa(e, Expr) - find_ssavalue_uses(e, uses, line) + find_ssavalue_uses!(e, uses, line) elseif isa(e, PhiNode) - find_ssavalue_uses(e, uses, line) + find_ssavalue_uses!(e, uses, line) end end return uses end -function find_ssavalue_uses(e::Expr, uses::Vector{BitSet}, line::Int) +function find_ssavalue_uses!(e::Expr, uses::Vector{BitSet}, line::Int) head = e.head is_meta_expr_head(head) && return skiparg = (head === :(=)) @@ -433,13 +433,16 @@ function find_ssavalue_uses(e::Expr, uses::Vector{BitSet}, line::Int) elseif isa(a, SSAValue) push!(uses[a.id], line) elseif isa(a, Expr) - find_ssavalue_uses(a, uses, line) + find_ssavalue_uses!(a, uses, line) end end end -function find_ssavalue_uses(e::PhiNode, uses::Vector{BitSet}, line::Int) - for val in e.values +function find_ssavalue_uses!(e::PhiNode, uses::Vector{BitSet}, line::Int) + values = e.values + for i = 1:length(values) + isassigned(values) || continue + val = values[i] if isa(val, SSAValue) push!(uses[val.id], line) end