|
738 | 738 |
|
739 | 739 | # method root provenance & external code caching
|
740 | 740 | precompile_test_harness("code caching") do dir
|
741 |
| - Bid = rootid(Base) |
742 | 741 | Cache_module = :Cacheb8321416e8a3e2f1
|
743 | 742 | # Note: calling setindex!(::Dict{K,V}, ::Any, ::K) adds both compression and codegen roots
|
744 | 743 | write(joinpath(dir, "$Cache_module.jl"),
|
@@ -1068,6 +1067,45 @@ precompile_test_harness("code caching") do dir
|
1068 | 1067 | end
|
1069 | 1068 | end
|
1070 | 1069 |
|
| 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 | + |
1071 | 1109 | precompile_test_harness("invoke") do dir
|
1072 | 1110 | InvokeModule = :Invoke0x030e7e97c2365aad
|
1073 | 1111 | CallerModule = :Caller0x030e7e97c2365aad
|
|
0 commit comments