Julia: segfault precompiling macro call

Created on 11 Feb 2017  路  4Comments  路  Source: JuliaLang/julia

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.

bug precompile

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

All 4 comments

@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

Was this page helpful?
0 / 5 - 0 ratings

Related issues

wilburtownsend picture wilburtownsend  路  3Comments

m-j-w picture m-j-w  路  3Comments

iamed2 picture iamed2  路  3Comments

omus picture omus  路  3Comments

yurivish picture yurivish  路  3Comments