Skip to content

Commit ab492b0

Browse files
committed
Add a test
1 parent f40a3c7 commit ab492b0

File tree

1 file changed

+39
-1
lines changed

1 file changed

+39
-1
lines changed

test/precompile.jl

+39-1
Original file line numberDiff line numberDiff line change
@@ -738,7 +738,6 @@ end
738738

739739
# method root provenance & external code caching
740740
precompile_test_harness("code caching") do dir
741-
Bid = rootid(Base)
742741
Cache_module = :Cacheb8321416e8a3e2f1
743742
# Note: calling setindex!(::Dict{K,V}, ::Any, ::K) adds both compression and codegen roots
744743
write(joinpath(dir, "$Cache_module.jl"),
@@ -1068,6 +1067,45 @@ precompile_test_harness("code caching") do dir
10681067
end
10691068
end
10701069

1070+
precompile_test_harness("precompiletools") do dir
1071+
PrecompileToolsModule = :PCTb8321416e8a3e2f1
1072+
write(joinpath(dir, "$PrecompileToolsModule.jl"),
1073+
"""
1074+
module $PrecompileToolsModule
1075+
struct MyType
1076+
x::Int
1077+
end
1078+
1079+
function call_findfirst(x, list)
1080+
# call a method defined in Base by runtime dispatch
1081+
return findfirst(==(Base.inferencebarrier(x)), Base.inferencebarrier(list))
1082+
end
1083+
1084+
let
1085+
ccall(:jl_tag_newly_inferred_enable, Cvoid, ())
1086+
call_findfirst(MyType(2), [MyType(1), MyType(2), MyType(3)])
1087+
ccall(:jl_tag_newly_inferred_disable, Cvoid, ())
1088+
end
1089+
end
1090+
"""
1091+
)
1092+
pkgid = Base.PkgId(string(PrecompileToolsModule))
1093+
@test !Base.isprecompiled(pkgid)
1094+
Base.compilecache(pkgid)
1095+
@test Base.isprecompiled(pkgid)
1096+
@eval using $PrecompileToolsModule
1097+
M = invokelatest(getfield, @__MODULE__, PrecompileToolsModule)
1098+
invokelatest() do
1099+
m = which(Tuple{typeof(findfirst), Base.Fix2{typeof(==), T}, Vector{T}} where T)
1100+
success = 0
1101+
for mi in Base.specializations(m)
1102+
sig = Base.unwrap_unionall(mi.specTypes)
1103+
success += sig.parameters[3] === Vector{M.MyType}
1104+
end
1105+
@test success == 1
1106+
end
1107+
end
1108+
10711109
precompile_test_harness("invoke") do dir
10721110
InvokeModule = :Invoke0x030e7e97c2365aad
10731111
CallerModule = :Caller0x030e7e97c2365aad

0 commit comments

Comments
 (0)