Revision 9e8fe688c5e32bde3ab48bb71f9d4ab45ef272ee authored by Valentin Churavy on 24 November 2023, 22:35:51 UTC, committed by GitHub on 24 November 2023, 22:35:51 UTC
Fixes #52213

Overwritting methods during cache creation is currently not something
that the system
can support and can lead to surprising, counter-intuitive and fatal
errors.

In 1.10 we turned it from a warning to a strong error, with this PR it
remains
a strong error, but the precompilation system recognizes it and
essentially sets `__precompile__(false)`
for this module and all modules that depend on it.

Before:
```
julia> using OverwriteMethodError
[ Info: Precompiling OverwriteMethodError [top-level]
WARNING: Method definition +(Bool, Bool) in module Base at bool.jl:166 overwritten in module OverwriteMethodError at /home/vchuravy/src/julia2/OverwriteMethodError.jl:2.
ERROR: LoadError: Method overwriting is not permitted during Module precompile.
Stacktrace:
 [1] top-level scope
   @ ~/src/julia2/OverwriteMethodError.jl:2
 [2] include
   @ Base ./Base.jl:489 [inlined]
 [3] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)
   @ Base ./loading.jl:2216
 [4] top-level scope
   @ stdin:3
in expression starting at /home/vchuravy/src/julia2/OverwriteMethodError.jl:1
in expression starting at stdin:3
ERROR: Failed to precompile OverwriteMethodError [top-level] to "/home/vchuravy/.julia/compiled/v1.10/jl_guiuCQ".
Stacktrace:
  [1] error(s::String)
    @ Base ./error.jl:35
  [2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool)
    @ Base ./loading.jl:2462
  [3] compilecache
    @ Base ./loading.jl:2334 [inlined]
  [4] (::Base.var"#968#969"{Base.PkgId})()
    @ Base ./loading.jl:1968
  [5] mkpidlock(f::Base.var"#968#969"{Base.PkgId}, at::String, pid::Int32; kwopts::@Kwargs{stale_age::Int64, wait::Bool})
    @ FileWatching.Pidfile ~/.julia/juliaup/julia-1.10.0-rc1+0.x64.linux.gnu/share/julia/stdlib/v1.10/FileWatching/src/pidfile.jl:93
  [6] #mkpidlock#6
    @ FileWatching.Pidfile ~/.julia/juliaup/julia-1.10.0-rc1+0.x64.linux.gnu/share/julia/stdlib/v1.10/FileWatching/src/pidfile.jl:88 [inlined]
  [7] trymkpidlock(::Function, ::Vararg{Any}; kwargs::@Kwargs{stale_age::Int64})
    @ FileWatching.Pidfile ~/.julia/juliaup/julia-1.10.0-rc1+0.x64.linux.gnu/share/julia/stdlib/v1.10/FileWatching/src/pidfile.jl:111
  [8] #invokelatest#2
    @ Base ./essentials.jl:889 [inlined]
  [9] invokelatest
    @ Base ./essentials.jl:884 [inlined]
 [10] maybe_cachefile_lock(f::Base.var"#968#969"{Base.PkgId}, pkg::Base.PkgId, srcpath::String; stale_age::Int64)
    @ Base ./loading.jl:2977
 [11] maybe_cachefile_lock
    @ Base ./loading.jl:2974 [inlined]
 [12] _require(pkg::Base.PkgId, env::String)
    @ Base ./loading.jl:1964
 [13] __require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base ./loading.jl:1806
 [14] #invoke_in_world#3
    @ Base ./essentials.jl:921 [inlined]
 [15] invoke_in_world
    @ Base ./essentials.jl:918 [inlined]
 [16] _require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base ./loading.jl:1797
 [17] macro expansion
    @ Base ./loading.jl:1784 [inlined]
 [18] macro expansion
    @ Base ./lock.jl:267 [inlined]
 [19] __require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1747
 [20] #invoke_in_world#3
    @ Base ./essentials.jl:921 [inlined]
 [21] invoke_in_world
    @ Base ./essentials.jl:918 [inlined]
 [22] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:1740
```

After:
```
julia> using OverwriteMethodError
┌ Info: Precompiling OverwriteMethodError [top-level]
└ @ Base loading.jl:2486
WARNING: Method definition +(Bool, Bool) in module Base at bool.jl:166 overwritten in module OverwriteMethodError at /home/vchuravy/src/julia2/OverwriteMethodError.jl:2.
ERROR: Method overwriting is not permitted during Module precompile.
┌ Info: Skipping precompilation since __precompile__(false). Importing OverwriteMethodError [top-level].
└ @ Base loading.jl:2084
```

---------

Co-authored-by: Kristoffer Carlsson <kcarlsson89@gmail.com>
1 parent 6e23543
History
File Mode Size
RelocationTestPkg1
RelocationTestPkg2
TestPkg
clangsa
compiler
depot
embedding
gc
gcext
llvmpasses
manifest
netload
project
strings
testhelpers
unicode
.gitignore -rw-r--r-- 94 bytes
Makefile -rw-r--r-- 3.1 KB
abstractarray.jl -rw-r--r-- 73.2 KB
ambiguous.jl -rw-r--r-- 16.6 KB
arrayops.jl -rw-r--r-- 106.8 KB
asyncmap.jl -rw-r--r-- 2.4 KB
atexit.jl -rw-r--r-- 10.5 KB
atomics.jl -rw-r--r-- 22.9 KB
backtrace.jl -rw-r--r-- 9.1 KB
binaryplatforms.jl -rw-r--r-- 21.0 KB
bitarray.jl -rw-r--r-- 70.6 KB
bitset.jl -rw-r--r-- 10.7 KB
boundscheck.jl -rw-r--r-- 814 bytes
boundscheck_exec.jl -rw-r--r-- 7.2 KB
broadcast.jl -rw-r--r-- 42.7 KB
cartesian.jl -rw-r--r-- 19.5 KB
ccall.jl -rw-r--r-- 64.3 KB
channel_threadpool.jl -rw-r--r-- 613 bytes
channels.jl -rw-r--r-- 18.2 KB
char.jl -rw-r--r-- 11.2 KB
checked.jl -rw-r--r-- 16.9 KB
choosetests.jl -rw-r--r-- 9.9 KB
client.jl -rw-r--r-- 1.6 KB
cmdlineargs.jl -rw-r--r-- 43.6 KB
combinatorics.jl -rw-r--r-- 5.0 KB
complex.jl -rw-r--r-- 55.0 KB
copy.jl -rw-r--r-- 7.5 KB
core.jl -rw-r--r-- 209.4 KB
corelogging.jl -rw-r--r-- 15.3 KB
deprecation_exec.jl -rw-r--r-- 6.2 KB
dict.jl -rw-r--r-- 47.9 KB
docs.jl -rw-r--r-- 32.4 KB
download.jl -rw-r--r-- 262 bytes
download_exec.jl -rw-r--r-- 1.0 KB
enums.jl -rw-r--r-- 7.9 KB
env.jl -rw-r--r-- 5.0 KB
error.jl -rw-r--r-- 3.8 KB
errorshow.jl -rw-r--r-- 41.1 KB
euler.jl -rw-r--r-- 16.9 KB
exceptions.jl -rw-r--r-- 10.8 KB
fastmath.jl -rw-r--r-- 10.6 KB
file.jl -rw-r--r-- 61.2 KB
filesystem.jl -rw-r--r-- 1.2 KB
float16.jl -rw-r--r-- 7.5 KB
floatapprox.jl -rw-r--r-- 2.3 KB
floatfuncs.jl -rw-r--r-- 10.5 KB
functional.jl -rw-r--r-- 7.6 KB
gc.jl -rw-r--r-- 981 bytes
generic_map_tests.jl -rw-r--r-- 4.0 KB
gmp.jl -rw-r--r-- 23.5 KB
goto.jl -rw-r--r-- 3.1 KB
hashing.jl -rw-r--r-- 10.1 KB
int.jl -rw-r--r-- 15.5 KB
interpreter.jl -rw-r--r-- 919 bytes
intfuncs.jl -rw-r--r-- 23.1 KB
intrinsics.jl -rw-r--r-- 18.9 KB
iobuffer.jl -rw-r--r-- 10.4 KB
iostream.jl -rw-r--r-- 5.6 KB
iterators.jl -rw-r--r-- 35.1 KB
keywordargs.jl -rw-r--r-- 11.3 KB
llvmcall.jl -rw-r--r-- 8.8 KB
llvmcall2.jl -rw-r--r-- 3.7 KB
loading.jl -rw-r--r-- 47.9 KB
math.jl -rw-r--r-- 62.0 KB
meta.jl -rw-r--r-- 8.1 KB
misc.jl -rw-r--r-- 42.3 KB
missing.jl -rw-r--r-- 25.1 KB
mod2pi.jl -rw-r--r-- 12.8 KB
mpfr.jl -rw-r--r-- 35.9 KB
namedtuple.jl -rw-r--r-- 16.9 KB
numbers.jl -rw-r--r-- 117.5 KB
offsetarray.jl -rw-r--r-- 29.9 KB
opaque_closure.jl -rw-r--r-- 10.7 KB
operators.jl -rw-r--r-- 11.7 KB
ordering.jl -rw-r--r-- 2.4 KB
osutils.jl -rw-r--r-- 2.6 KB
parse.jl -rw-r--r-- 13.0 KB
path.jl -rw-r--r-- 17.4 KB
precompile.jl -rw-r--r-- 66.7 KB
print_process_affinity.jl -rw-r--r-- 896 bytes
profile_spawnmany_exec.jl -rw-r--r-- 300 bytes
ranges.jl -rw-r--r-- 98.3 KB
rational.jl -rw-r--r-- 31.8 KB
read.jl -rw-r--r-- 23.8 KB
reduce.jl -rw-r--r-- 26.3 KB
reducedim.jl -rw-r--r-- 31.0 KB
reflection.jl -rw-r--r-- 40.2 KB
regex.jl -rw-r--r-- 12.0 KB
reinterpretarray.jl -rw-r--r-- 23.7 KB
relocatedepot.jl -rw-r--r-- 5.1 KB
rounding.jl -rw-r--r-- 17.0 KB
runtests.jl -rw-r--r-- 17.8 KB
ryu.jl -rw-r--r-- 39.2 KB
scopedvalues.jl -rw-r--r-- 2.9 KB
secretbuffer.jl -rw-r--r-- 5.2 KB
sets.jl -rw-r--r-- 33.8 KB
show.jl -rw-r--r-- 99.3 KB
simdloop.jl -rw-r--r-- 4.5 KB
smallarrayshrink.jl -rw-r--r-- 626 bytes
some.jl -rw-r--r-- 4.3 KB
sorting.jl -rw-r--r-- 46.7 KB
spawn.jl -rw-r--r-- 35.5 KB
specificity.jl -rw-r--r-- 12.7 KB
stack_overflow.jl -rw-r--r-- 1.0 KB
stacktraces.jl -rw-r--r-- 9.5 KB
staged.jl -rw-r--r-- 10.1 KB
stress.jl -rw-r--r-- 2.6 KB
stress_fd_exec.jl -rw-r--r-- 675 bytes
subarray.jl -rw-r--r-- 26.6 KB
subtype.jl -rw-r--r-- 112.5 KB
syntax.jl -rw-r--r-- 108.6 KB
sysinfo.jl -rw-r--r-- 1.6 KB
terminfo.jl -rw-r--r-- 43.9 KB
test_exec.jl -rw-r--r-- 157 bytes
test_sourcepath.jl -rw-r--r-- 601 bytes
testdefs.jl -rw-r--r-- 4.4 KB
testenv.jl -rw-r--r-- 2.5 KB
threadpool_latency.jl -rw-r--r-- 1.2 KB
threadpool_use.jl -rw-r--r-- 755 bytes
threads.jl -rw-r--r-- 10.6 KB
threads_exec.jl -rw-r--r-- 32.7 KB
triplequote.jl -rw-r--r-- 1.3 KB
tuple.jl -rw-r--r-- 28.7 KB
vecelement.jl -rw-r--r-- 3.4 KB
version.jl -rw-r--r-- 8.9 KB
worlds.jl -rw-r--r-- 15.7 KB

back to top