Skip to content

Commit f98f673

Browse files
committed
fix code_coverage_effect
1 parent a6cee92 commit f98f673

File tree

4 files changed

+41
-0
lines changed

4 files changed

+41
-0
lines changed

Project.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ uuid = "6b7a57c9-7cc1-4fdf-b7f5-e857abae3638"
33
version = "0.1.5"
44

55
[deps]
6+
CodeInfoTools = "bc773b8a-8374-437a-b9f2-0e9785855863"
67
Expronicon = "6b7a57c9-7cc1-4fdf-b7f5-e857abae3636"
78
MLStyle = "d8e11817-5142-5d16-987a-aa16d5891078"
89

src/patches.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,7 @@ Base.iterate(p::Core.Compiler.Pair) = Core.Compiler.iterate(p)
101101
Base.iterate(p::Core.Compiler.Pair, st) = Core.Compiler.iterate(p, st)
102102

103103
Base.getindex(m::Core.Compiler.MethodLookupResult, idx::Int) = Core.Compiler.getindex(m, idx)
104+
105+
Base.length(x::Core.Compiler.BitSet) = Core.Compiler.length(x)
106+
Base.iterate(x::Core.Compiler.BitSet) = Core.Compiler.iterate(x)
107+
Base.iterate(x::Core.Compiler.BitSet, st) = Core.Compiler.iterate(x, st)

src/utils.jl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,18 @@ function rm_code_coverage_effect(ci::CodeInfo)
8585
for (v, stmt) in new
8686
if Meta.isexpr(stmt, :code_coverage_effect)
8787
delete!(new, v)
88+
elseif stmt isa GotoIfNot
89+
# idx always exists since code_coverage_effect was inserted
90+
idx = findfirst(stmt.dest:length(ci.code)) do k
91+
!Meta.isexpr(ci.code[k], :code_coverage_effect)
92+
end
93+
new[v] = GotoIfNot(stmt.cond, stmt.dest+idx-1)
94+
elseif stmt isa GotoNode
95+
# idx always exists since code_coverage_effect was inserted
96+
idx = findfirst(stmt.label:length(ci.code)) do k
97+
!Meta.isexpr(ci.code[k], :code_coverage_effect)
98+
end
99+
new[v] = GotoNode(stmt.label+idx-1)
88100
end
89101
end
90102
new_ci = finish(new)

test/codeinfo.jl

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,3 +156,27 @@ end
156156
#=%8=# ReturnNode(SSAValue(7))::Float64
157157
end
158158
end
159+
160+
@testset "test code_coverage_effect bb start" begin
161+
ci = @make_codeinfo begin
162+
Expr(:code_coverage_effect)::Nothing
163+
Expr(:code_coverage_effect)::Nothing
164+
Expr(:code_coverage_effect)::Nothing
165+
Expr(:code_coverage_effect)::Nothing
166+
Expr(:call, GlobalRef(Main, :foo), 2)::Nothing
167+
Expr(:call, GlobalRef(Main, :measure), 2)::Int
168+
Expr(:code_coverage_effect)::Nothing
169+
Expr(:code_coverage_effect)::Nothing
170+
Expr(:call, GlobalRef(Main, :measure_cmp), SSAValue(6), 1)::Bool
171+
GotoIfNot(SSAValue(9), 14)
172+
Expr(:code_coverage_effect)::Nothing
173+
Expr(:code_coverage_effect)::Nothing
174+
Expr(:call, GlobalRef(Main, :foo), 2)::Nothing
175+
Expr(:code_coverage_effect)::Nothing
176+
ReturnNode(nothing)::Nothing
177+
end
178+
179+
stmt = CompilerPluginTools.rm_code_coverage_effect(ci).code[4]
180+
@test stmt.cond == SSAValue(3)
181+
@test stmt.dest == 6
182+
end

0 commit comments

Comments
 (0)