Recently, Julia 0.5 started segfaulting when precompiling PyCall (JuliaPy/PyCall.jl#360). I've boiled it down to the following code:
__precompile__()
module PyCall
import MacroTools: @capture
function parse_pydef_toplevel(expr)
if @capture(expr, begin type class_name_ <: base_classes_expr_
lines__
end end)
end
end
end # module PyCall
This gives:
julia> versioninfo()
Julia Version 0.5.0
Commit 3c9d753 (2016-09-19 18:14 UTC)
Platform Info:
System: Darwin (x86_64-apple-darwin13.4.0)
CPU: Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz
WORD_SIZE: 64
BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Haswell)
LAPACK: libopenblas64_
LIBM: libopenlibm
LLVM: libLLVM-3.7.1 (ORCJIT, haswell)
julia> using PyCall
INFO: Precompiling module PyCall.
signal (11): Segmentation fault: 11
while loading /Users/stevenj/.julia/v0.5/PyCall/src/PyCall.jl, in expression starting on line 7
julia_type_to_llvm at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/./cgutils.cpp:318
mark_julia_const at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/codegen.cpp:641 [inlined]
emit_expr at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/codegen.cpp:3140
emit_invoke at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/codegen.cpp:2669 [inlined]
emit_expr at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/codegen.cpp:3162
emit_jlcall at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/codegen.cpp:2578
emit_call at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/codegen.cpp:2739
emit_expr at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/codegen.cpp:3172
emit_function at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/codegen.cpp:4691
jl_compile_linfo at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/codegen.cpp:809
jl_compile_for_dispatch at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/gf.c:1310
jl_call_method_internal at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/./julia_internal.h:184 [inlined]
jl_apply_generic at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/gf.c:1942
@capture at /Users/stevenj/.julia/v0.5/MacroTools/src/macro.jl:61
jl_call_method_internal at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/./julia_internal.h:189 [inlined]
fl_invoke_julia_macro at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/ast.c:161
apply_cl at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/flisp/flisp.c:1227
_applyn at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/flisp/flisp.c:678
fl_map1 at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/flisp/flisp.c:2220
apply_cl at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/flisp/flisp.c:1177
_applyn at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/flisp/flisp.c:678
fl_map1 at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/flisp/flisp.c:2220
apply_cl at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/flisp/flisp.c:1177
_applyn at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/flisp/flisp.c:678
fl_map1 at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/flisp/flisp.c:2220
apply_cl at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/flisp/flisp.c:1177
do_trycatch at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/flisp/flisp.c:899
apply_cl at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/flisp/flisp.c:1807
_applyn at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/flisp/flisp.c:678
fl_applyn at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/flisp/flisp.c:723
jl_call_scm_on_ast at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/ast.c:778
jl_eval_module_expr at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/toplevel.c:195
jl_toplevel_eval_flex at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/toplevel.c:465
jl_parse_eval_all at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/ast.c:717
jl_load at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/toplevel.c:596 [inlined]
jl_load_ at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/toplevel.c:605
include_from_node1 at ./loading.jl:488
jlcall_include_from_node1_20125 at /Applications/Julia-0.5.app/Contents/Resources/julia/lib/julia/sys.dylib (unknown line)
jl_call_method_internal at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/./julia_internal.h:189 [inlined]
jl_apply_generic at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/gf.c:1942
do_call at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/interpreter.c:66
eval at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/interpreter.c:190
jl_toplevel_eval_flex at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/toplevel.c:558
jl_toplevel_eval_in_warn at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/builtins.c:590
macro expansion; at ./none:2 [inlined]
anonymous at ./<missing> (unknown line)
unknown function (ip: 0x116df16c1)
jl_call_method_internal at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/./julia_internal.h:189 [inlined]
jl_toplevel_eval_flex at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/toplevel.c:569
jl_toplevel_eval_in_warn at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/builtins.c:590
eval at ./boot.jl:234
jlcall_eval_19752 at /Applications/Julia-0.5.app/Contents/Resources/julia/lib/julia/sys.dylib (unknown line)
jl_call_method_internal at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/./julia_internal.h:189 [inlined]
jl_apply_generic at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/gf.c:1942
process_options at ./client.jl:239
_start at ./client.jl:318
jlcall__start_21452 at /Applications/Julia-0.5.app/Contents/Resources/julia/lib/julia/sys.dylib (unknown line)
jl_call_method_internal at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/./julia_internal.h:189 [inlined]
jl_apply_generic at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/gf.c:1942
true_main at /Applications/Julia-0.5.app/Contents/Resources/julia/bin/julia (unknown line)
main at /Applications/Julia-0.5.app/Contents/Resources/julia/bin/julia (unknown line)
Allocations: 1202188 (Pool: 1201349; Big: 839); GC: 0
ERROR: Failed to precompile PyCall to /Users/stevenj/.julia/lib/v0.5/PyCall.ji.
in compilecache(::String) at ./loading.jl:593
in require(::Symbol) at ./loading.jl:422
in require(::Symbol) at /Applications/Julia-0.5.app/Contents/Resources/julia/lib/julia/sys.dylib:?
This is with MacroTools 0.3.5.
@MikeInnes and @yuyichao, presumably this is related to the recent MacroTools updates? Though nothing MacroTools could have done should be able to segfault Julia, since presumably it doesn't use any unsafe operations?
Pkg.pin("MacroTools", v"0.3.4") eliminates the segfault for me, so this was somehow triggered by the MacroTools v0.3.5 changes.
Should be fixed by https://github.com/JuliaLang/julia/commit/ed7002e3d671e5d5fd496ed00c238d7b61e1342b, I'm working on a 0.5.1 backport PR right now, but in the meantime a workaround (like making a new MacroTools 0.3.6 tag that's the same commit as 0.3.4, or restricting 0.3.5 to max-0.5 or min-0.6-pre) would be good to find since this is causing widespread problems
closing as duplicate of https://github.com/JuliaLang/julia/issues/20050, as far as base is concerned. needs action in metadata for a short term workaround. see https://github.com/JuliaLang/METADATA.jl/pull/7903
Most helpful comment
Should be fixed by https://github.com/JuliaLang/julia/commit/ed7002e3d671e5d5fd496ed00c238d7b61e1342b, I'm working on a 0.5.1 backport PR right now, but in the meantime a workaround (like making a new MacroTools 0.3.6 tag that's the same commit as 0.3.4, or restricting 0.3.5 to max-0.5 or min-0.6-pre) would be good to find since this is causing widespread problems