Skip to content

Commit 6a3a8bd

Browse files
authored
emit warning when detecting invalidly transformed code (#63)
1 parent 6c3c44e commit 6a3a8bd

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

CassetteBase/src/CassetteBase.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ function cassette_transform!(src::CodeInfo, mi::MethodInstance, nargs::Int,
6767
src.edges = MethodInstance[mi]
6868
src.method_for_inference_limit_heuristics = method
6969

70-
return src
70+
return Core.Compiler.validate_code(mi, src)
7171
end
7272

7373
function transform_stmt(@nospecialize(x), map_slot_number, map_ssa_value, @nospecialize(spsig), sparams::SimpleVector)

CassetteBase/test/test_basic.jl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,14 @@ function generate_basic_src(world::UInt, source::SourceType, passtype, fargtypes
3030
mi = Core.Compiler.specialize_method(match)
3131
src = Core.Compiler.retrieve_code_info(mi, world)
3232
src === nothing && return nothing # code generation failed - the fallback implementation will re-raise it
33-
cassette_transform!(src, mi, length(fargtypes), selfname, fargsname)
33+
errors = cassette_transform!(src, mi, length(fargtypes), selfname, fargsname)
34+
if !isempty(errors)
35+
# TODO `throw(errors)` when updating the minimum compat to 1.12
36+
Core.println("Found invalid code:")
37+
for e in errors
38+
Core.println("- ", e)
39+
end
40+
end
3441
return src
3542
end
3643

src/CassetteOverlay.jl

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ function (generator::CassetteOverlayGenerator)(world::UInt, source::SourceType,
4848
end
4949
end
5050

51-
function generate_overlay_src(world::UInt, #=source=#::SourceType, passtype, fargtypes,
51+
global invalid_code::Vector{Any} = []
52+
53+
function generate_overlay_src(world::UInt, source::SourceType, passtype, fargtypes,
5254
selfname::Symbol, fargsname::Symbol)
5355
@nospecialize passtype fargtypes
5456
tt = Base.to_tuple_type(fargtypes)
@@ -57,7 +59,15 @@ function generate_overlay_src(world::UInt, #=source=#::SourceType, passtype, far
5759
mi = Core.Compiler.specialize_method(match)
5860
src = Core.Compiler.retrieve_code_info(mi, world)
5961
src === nothing && return nothing # code generation failed - the fallback implementation will re-raise it
60-
cassette_transform!(src, mi, length(fargtypes), selfname, fargsname)
62+
errors = cassette_transform!(src, mi, length(fargtypes), selfname, fargsname)
63+
if !isempty(errors)
64+
Core.println("Found invalid code:")
65+
for e in errors
66+
Core.println("- ", e)
67+
end
68+
push!(invalid_code, (world, source, passtype, fargtypes, src, selfname, fargsname))
69+
# TODO `return nothing` when updating the minimum compat to 1.12
70+
end
6171
return src
6272
end
6373

0 commit comments

Comments
 (0)