Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"error occurred during inference" MethodError on 0.6RC1 #21848

Closed
marius311 opened this issue May 13, 2017 · 8 comments
Closed

"error occurred during inference" MethodError on 0.6RC1 #21848

marius311 opened this issue May 13, 2017 · 8 comments
Labels
compiler:inference Type inference types and dispatch Types, subtyping and method dispatch

Comments

@marius311
Copy link
Contributor

Apologies I don't have a reduced code snippet, but this is happening in a pretty big chunk of code and it requires restarting Julia every time to narrow down the actual source of the error. Instead, I thought maybe just maybe someone knowledgeable enough can guess what's happening from the stack trace below, or offer guesses as to what to look for in narrowing it down.

Basically, once I execute the offending code, the below error/warning is printed, although the program continues seemingly without error. Its reproducible every time. This is on 0.6rc1.

WARNING: An error occurred during inference. Type inference is now partially disabled.
Base.MethodError(f=typeof(Base.string)(), args=(Expr(:||, Expr(:call, :!, Expr(:call, :isa, :t, :Type)::Any)::Any, Expr(:<:, :t, :r)::Any)::Any,), world=0x0000000000000abf)
rec_backtrace at /home/marius/src/julia/src/stackwalk.c:84
record_backtrace at /home/marius/src/julia/src/task.c:245
jl_throw at /home/marius/src/julia/src/task.c:564
jl_method_error_bare at /home/marius/src/julia/src/gf.c:1476
jl_method_error at /home/marius/src/julia/src/gf.c:1494
jl_lookup_generic_ at /home/marius/src/julia/src/gf.c:1907 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1927
limit_type_depth at ./inference.jl:666
unknown function (ip: 0x7fe0b3770f92)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call_gf_by_type at ./inference.jl:1318
unknown function (ip: 0x7fe0b374adc6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call at ./inference.jl:1864
unknown function (ip: 0x7fe0b3746cde)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_eval_call at ./inference.jl:1894
abstract_eval at ./inference.jl:1917
unknown function (ip: 0x7fe0b3741be6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
typeinf_frame at ./inference.jl:2760
typeinf_loop at ./inference.jl:2606
typeinf_frame at ./inference.jl:2476
typeinf_edge at ./inference.jl:2499
unknown function (ip: 0x7fe0b374ce5a)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call_gf_by_type at ./inference.jl:1386
unknown function (ip: 0x7fe0b374adc6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call at ./inference.jl:1864
unknown function (ip: 0x7fe0b3746cde)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_eval_call at ./inference.jl:1894
abstract_eval at ./inference.jl:1917
unknown function (ip: 0x7fe0b3741be6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
copy! at ./abstractarray.jl:565
abstract_eval_call at ./inference.jl:1868
abstract_eval at ./inference.jl:1917
unknown function (ip: 0x7fe0b3741be6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_interpret at ./inference.jl:2043
unknown function (ip: 0x7fe0b3742236)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
typeinf_frame at ./inference.jl:2707
typeinf_loop at ./inference.jl:2606
typeinf_frame at ./inference.jl:2476
typeinf_edge at ./inference.jl:2499
unknown function (ip: 0x7fe0b374ce5a)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call_gf_by_type at ./inference.jl:1386
unknown function (ip: 0x7fe0b374adc6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call at ./inference.jl:1864
unknown function (ip: 0x7fe0b3746cde)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_eval_call at ./inference.jl:1894
abstract_eval at ./inference.jl:1917
unknown function (ip: 0x7fe0b3741be6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
typeinf_frame at ./inference.jl:2760
typeinf_loop at ./inference.jl:2606
typeinf_frame at ./inference.jl:2476
typeinf_edge at ./inference.jl:2499
unknown function (ip: 0x7fe0b374ce5a)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call_gf_by_type at ./inference.jl:1386
unknown function (ip: 0x7fe0b374adc6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call at ./inference.jl:1864
unknown function (ip: 0x7fe0b3746cde)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_eval_call at ./inference.jl:1894
abstract_eval at ./inference.jl:1917
unknown function (ip: 0x7fe0b3741be6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_interpret at ./inference.jl:2043
unknown function (ip: 0x7fe0b3742236)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
typeinf_frame at ./inference.jl:2707
typeinf_loop at ./inference.jl:2606
typeinf_frame at ./inference.jl:2476
typeinf_edge at ./inference.jl:2499
unknown function (ip: 0x7fe0b374ce5a)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call_gf_by_type at ./inference.jl:1386
unknown function (ip: 0x7fe0b374adc6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call at ./inference.jl:1864
unknown function (ip: 0x7fe0b3746cde)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_eval_call at ./inference.jl:1894
abstract_eval at ./inference.jl:1917
unknown function (ip: 0x7fe0b3741be6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
typeinf_frame at ./inference.jl:2760
typeinf_loop at ./inference.jl:2606
typeinf_frame at ./inference.jl:2476
typeinf_edge at ./inference.jl:2499
unknown function (ip: 0x7fe0b374ce5a)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call_gf_by_type at ./inference.jl:1386
unknown function (ip: 0x7fe0b374adc6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call at ./inference.jl:1864
unknown function (ip: 0x7fe0b3746cde)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_eval_call at ./inference.jl:1894
abstract_eval at ./inference.jl:1917
unknown function (ip: 0x7fe0b3741be6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
typeinf_frame at ./inference.jl:2760
typeinf_loop at ./inference.jl:2623
typeinf_frame at ./inference.jl:2476
typeinf_code at ./inference.jl:2546
unknown function (ip: 0x7fe0b375d59d)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
typeinf_ext at ./inference.jl:2585
unknown function (ip: 0x7fe0b373ca02)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
jl_apply at /home/marius/src/julia/src/julia.h:1422 [inlined]
jl_apply_with_saved_exception_state at /home/marius/src/julia/src/rtutils.c:257
jl_type_infer at /home/marius/src/julia/src/gf.c:269
jl_compile_for_dispatch at /home/marius/src/julia/src/gf.c:1665
jl_compile_method_internal at /home/marius/src/julia/src/julia_internal.h:305 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:352 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
do_call at /home/marius/src/julia/src/interpreter.c:75
eval at /home/marius/src/julia/src/interpreter.c:242
jl_interpret_toplevel_expr at /home/marius/src/julia/src/interpreter.c:34
jl_toplevel_eval_flex at /home/marius/src/julia/src/toplevel.c:575
jl_parse_eval_all at /home/marius/src/julia/src/ast.c:873
include_string at ./loading.jl:498
include_string at /home/marius/.julia/v0.6/CodeTools/src/eval.jl:30
unknown function (ip: 0x7fe04d48f9b0)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
do_call at /home/marius/src/julia/src/interpreter.c:75
eval at /home/marius/src/julia/src/interpreter.c:242
jl_interpret_toplevel_expr at /home/marius/src/julia/src/interpreter.c:34
jl_toplevel_eval_flex at /home/marius/src/julia/src/toplevel.c:575
jl_toplevel_eval_in at /home/marius/src/julia/src/builtins.c:496
include_string at /home/marius/.julia/v0.6/CodeTools/src/eval.jl:34
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
#49 at /home/marius/.julia/v0.6/Atom/src/eval.jl:50
withpath at /home/marius/.julia/v0.6/CodeTools/src/utils.jl:30
unknown function (ip: 0x7fe04d48f6a2)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
withpath at /home/marius/.julia/v0.6/Atom/src/eval.jl:38
unknown function (ip: 0x7fe04d48f386)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930WARNING: An error occurred during inference. Type inference is now partially disabled.
Base.MethodError(f=typeof(Base.string)(), args=(Expr(:||, Expr(:call, :!, Expr(:call, :isa, :t, :Type)::Any)::Any, Expr(:<:, :t, :r)::Any)::Any,), world=0x0000000000000abf)
rec_backtrace at /home/marius/src/julia/src/stackwalk.c:84
record_backtrace at /home/marius/src/julia/src/task.c:245
jl_throw at /home/marius/src/julia/src/task.c:564
jl_method_error_bare at /home/marius/src/julia/src/gf.c:1476
jl_method_error at /home/marius/src/julia/src/gf.c:1494
jl_lookup_generic_ at /home/marius/src/julia/src/gf.c:1907 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1927
limit_type_depth at ./inference.jl:666
unknown function (ip: 0x7fe0b3770f92)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call_gf_by_type at ./inference.jl:1318
unknown function (ip: 0x7fe0b374adc6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call at ./inference.jl:1864
unknown function (ip: 0x7fe0b3746cde)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_eval_call at ./inference.jl:1894
abstract_eval at ./inference.jl:1917
unknown function (ip: 0x7fe0b3741be6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
typeinf_frame at ./inference.jl:2760
typeinf_loop at ./inference.jl:2606
typeinf_frame at ./inference.jl:2476
typeinf_edge at ./inference.jl:2499
unknown function (ip: 0x7fe0b374ce5a)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call_gf_by_type at ./inference.jl:1386
unknown function (ip: 0x7fe0b374adc6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call at ./inference.jl:1864
unknown function (ip: 0x7fe0b3746cde)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_eval_call at ./inference.jl:1894
abstract_eval at ./inference.jl:1917
unknown function (ip: 0x7fe0b3741be6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
copy! at ./abstractarray.jl:565
abstract_eval_call at ./inference.jl:1868
abstract_eval at ./inference.jl:1917
unknown function (ip: 0x7fe0b3741be6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_interpret at ./inference.jl:2043
unknown function (ip: 0x7fe0b3742236)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
typeinf_frame at ./inference.jl:2707
typeinf_loop at ./inference.jl:2606
typeinf_frame at ./inference.jl:2476
typeinf_edge at ./inference.jl:2499
unknown function (ip: 0x7fe0b374ce5a)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call_gf_by_type at ./inference.jl:1386
unknown function (ip: 0x7fe0b374adc6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call at ./inference.jl:1864
unknown function (ip: 0x7fe0b3746cde)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_eval_call at ./inference.jl:1894
abstract_eval at ./inference.jl:1917
unknown function (ip: 0x7fe0b3741be6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
typeinf_frame at ./inference.jl:2760
typeinf_loop at ./inference.jl:2606
typeinf_frame at ./inference.jl:2476
typeinf_edge at ./inference.jl:2499
unknown function (ip: 0x7fe0b374ce5a)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call_gf_by_type at ./inference.jl:1386
unknown function (ip: 0x7fe0b374adc6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call at ./inference.jl:1864
unknown function (ip: 0x7fe0b3746cde)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_eval_call at ./inference.jl:1894
abstract_eval at ./inference.jl:1917
unknown function (ip: 0x7fe0b3741be6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_interpret at ./inference.jl:2043
unknown function (ip: 0x7fe0b3742236)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
typeinf_frame at ./inference.jl:2707
typeinf_loop at ./inference.jl:2606
typeinf_frame at ./inference.jl:2476
typeinf_edge at ./inference.jl:2499
unknown function (ip: 0x7fe0b374ce5a)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call_gf_by_type at ./inference.jl:1386
unknown function (ip: 0x7fe0b374adc6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call at ./inference.jl:1864
unknown function (ip: 0x7fe0b3746cde)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_eval_call at ./inference.jl:1894
abstract_eval at ./inference.jl:1917
unknown function (ip: 0x7fe0b3741be6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
typeinf_frame at ./inference.jl:2760
typeinf_loop at ./inference.jl:2606
typeinf_frame at ./inference.jl:2476
typeinf_edge at ./inference.jl:2499
unknown function (ip: 0x7fe0b374ce5a)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call_gf_by_type at ./inference.jl:1386
unknown function (ip: 0x7fe0b374adc6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_call at ./inference.jl:1864
unknown function (ip: 0x7fe0b3746cde)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
abstract_eval_call at ./inference.jl:1894
abstract_eval at ./inference.jl:1917
unknown function (ip: 0x7fe0b3741be6)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
typeinf_frame at ./inference.jl:2760
typeinf_loop at ./inference.jl:2623
typeinf_frame at ./inference.jl:2476
typeinf_code at ./inference.jl:2546
unknown function (ip: 0x7fe0b375d59d)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
typeinf_ext at ./inference.jl:2585
unknown function (ip: 0x7fe0b373ca02)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
jl_apply at /home/marius/src/julia/src/julia.h:1422 [inlined]
jl_apply_with_saved_exception_state at /home/marius/src/julia/src/rtutils.c:257
jl_type_infer at /home/marius/src/julia/src/gf.c:269
jl_compile_for_dispatch at /home/marius/src/julia/src/gf.c:1665
jl_compile_method_internal at /home/marius/src/julia/src/julia_internal.h:305 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:352 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
do_call at /home/marius/src/julia/src/interpreter.c:75
eval at /home/marius/src/julia/src/interpreter.c:242
jl_interpret_toplevel_expr at /home/marius/src/julia/src/interpreter.c:34
jl_toplevel_eval_flex at /home/marius/src/julia/src/toplevel.c:575
jl_parse_eval_all at /home/marius/src/julia/src/ast.c:873
include_string at ./loading.jl:498
include_string at /home/marius/.julia/v0.6/CodeTools/src/eval.jl:30
unknown function (ip: 0x7fe04d48f9b0)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
do_call at /home/marius/src/julia/src/interpreter.c:75
eval at /home/marius/src/julia/src/interpreter.c:242
jl_interpret_toplevel_expr at /home/marius/src/julia/src/interpreter.c:34
jl_toplevel_eval_flex at /home/marius/src/julia/src/toplevel.c:575
jl_toplevel_eval_in at /home/marius/src/julia/src/builtins.c:496
include_string at /home/marius/.julia/v0.6/CodeTools/src/eval.jl:34
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
#49 at /home/marius/.julia/v0.6/Atom/src/eval.jl:50
withpath at /home/marius/.julia/v0.6/CodeTools/src/utils.jl:30
unknown function (ip: 0x7fe04d48f6a2)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
withpath at /home/marius/.julia/v0.6/Atom/src/eval.jl:38
unknown function (ip: 0x7fe04d48f386)
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
macro expansion at /home/marius/.julia/v0.6/Atom/src/eval.jl:49 [inlined]
#48 at ./task.jl:80
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
jl_apply at /home/marius/src/julia/src/julia.h:1422 [inlined]
start_task at /home/marius/src/julia/src/task.c:267
unknown function (ip: 0xffffffffffffffff)

macro expansion at /home/marius/.julia/v0.6/Atom/src/eval.jl:49 [inlined]
#48 at ./task.jl:80
jl_call_fptr_internal at /home/marius/src/julia/src/julia_internal.h:337 [inlined]
jl_call_method_internal at /home/marius/src/julia/src/julia_internal.h:356 [inlined]
jl_apply_generic at /home/marius/src/julia/src/gf.c:1930
jl_apply at /home/marius/src/julia/src/julia.h:1422 [inlined]
start_task at /home/marius/src/julia/src/task.c:267
unknown function (ip: 0xffffffffffffffff)
julia> versioninfo()
Julia Version 0.6.0-rc1.0
Commit 6bdb395* (2017-05-07 00:00 UTC)
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz
  WORD_SIZE: 64
  BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Haswell)
  LAPACK: libopenblas64_
  LIBM: libopenlibm
  LLVM: libLLVM-3.9.1 (ORCJIT, skylake)
@JeffBezanson JeffBezanson added compiler:inference Type inference types and dispatch Types, subtyping and method dispatch labels May 13, 2017
@JeffBezanson
Copy link
Sponsor Member

Try applying this patch and seeing what output we get:

diff --git a/base/inference.jl b/base/inference.jl
index 22adbe4..199c105 100644
--- a/base/inference.jl
+++ b/base/inference.jl
@@ -663,7 +663,11 @@ end
 
 function limit_type_depth(t::ANY, d::Int)
     r = limit_type_depth(t, d, true, TypeVar[])
-    @assert !isa(t, Type) || t <: r
+    if isa(t, Type) && !(t <: r)
+        println(t)
+        println(r)
+        @assert !isa(t, Type) || t <: r
+    end
     return r
 end

@marius311
Copy link
Contributor Author

Thanks very much for taking a look at this. Here's the output I get after adding that patch in, it definitely hit your print statement. (minor note but I ran this from the REPL as opposed to from Atom like above, just since it seemed to multiplex the output nicer, but I don't think that made any any difference)

I guess one thing that stands out is that both my LazyBinaryOp and FuncOp that you see appear in the output are parametric types where one of the parameters is a function like in LazyBinaryOp{Base.:(*),...} or a the type of an anonymous function like in FuncOp{getfield(CMBLensing, Symbol("##292#293")), ...}}. My guess is its related to those but I'm not sure...

If its any help, here's their definition,

struct LazyBinaryOp{F,A<:Union{LinOp,Scalar},B<:Union{LinOp,Scalar}} <: LinOp{Pix,Spin,Basis}
    a::A
    b::B
    LazyBinaryOp(op,a::A,b::B) where {A,B} = new{op,A,B}(a,b)
end

@with_kw struct FuncOp{F<:Union{Function,Void},Fᴴ<:Union{Function,Void},F⁻¹<:Union{Function,Void},F⁻ᴴ<:Union{Function,Void}} <: LinOp{Pix,Spin,Basis}
    op  ::F   = nothing
    opᴴ ::F= nothing
    op⁻¹::F⁻¹ = nothing
    op⁻ᴴ::F⁻= nothing
end

@martinholters
Copy link
Member

Wow, that are impressively complicated types! And it really makes me wish they would parse as they were printed. With all typevars just _ it's impossible to say whether t actually is not a subtype of r or the subtyping code just gets it wrong. (Or did I miss something obvious?)
Maybe we should add a dedicated type-printing function that keeps track of the used typevars and renames them if necessary? Would be helpful in debugging cases like this one.
Oh, and does anyone have ideas why they contain things like typeof(Base.:(*))() in their printed representation? Is that just a weird way to print * (or Base.:(*))?

@marius311
Copy link
Contributor Author

Wow, that are impressively complicated types!

Yea, its mostly coming from that I essentially parse a complicated arithmetic expression into a recursive bunch of those LazyBinaryOp types. FWIW, it seems the complicatedness of the expression matters for triggering this bug.

Just throwing this out there, but since I'm still unable to come up with a good reduced example, would it be helpful if I e.g. sent you guys a Docker container that just has my whole code running and triggers this bug? The codes not public yet, and you probably wouldn't want to waste time getting the dependencies anyway, which is why I'd do it this way and just send privately. Let me know if that's something that'd be useful.

@vtjnash
Copy link
Sponsor Member

vtjnash commented May 15, 2017

I see a possible bug in that assertion, which might be avoided by the following patch. However, I don't know that this is what you are seeing.

diff --git a/base/inference.jl b/base/inference.jl
index 9dab296025..03a7f2e5f0 100644
--- a/base/inference.jl
+++ b/base/inference.jl
@@ -704,8 +704,14 @@ function limit_type_depth(t::ANY, d::Int, cov::Bool, vars::Vector{TypeVar}=TypeV
     P = t.parameters
     isempty(P) && return t
     if d > MAX_TYPE_DEPTH
-        cov && return t.name.wrapper
-        var = TypeVar(:_, t.name.wrapper)
+        widert = t.name.wrapper
+        if !(t <: widert)
+            # oops, this'll trigger our subtype assertion
+            # widen even faster to something safe
+            widert = Any
+        end
+        cov && return widert
+        var = TypeVar(:_, widert)
         push!(vars, var)
         return var
     end

If not, a docker example sounds like a good idea and you can PM me a link.

Test case for triggering above error:

julia> Core.Inference.limit_type_depth(Ref{Complex{T} where T}, Core.Inference.MAX_TYPE_DEPTH)
ERROR: AssertionError: !(t isa Type) || t <: r

@marius311
Copy link
Contributor Author

Thanks. With both patches applied now, it does change the types that get printed to the much shorter,

Tuple{Tuple{Int64, Void}, Tuple{Tuple{Int64, Void}, Tuple{Int64, Tuple{Tuple{Int64, Void}, Tuple{Tuple{Int64, Void}, Tuple{Int64, Tuple{Tuple{Int64, Void}, Tuple{Tuple, Tuple}}}}}}}}
Tuple{Tuple{Int64, Void}, Tuple{Tuple{Int64, Void}, Tuple{Int64, Tuple{Tuple{Int64, Void}, Tuple{Tuple{Int64, Void}, Tuple{Int64, Tuple{Tuple{Int64, Void}, Tuple{Tuple{Any}, Tuple{Any}}}}}}}}}

The full output is here. You can also see a second error that actually kills the program, which I realize I had missed when I posted my original output (and when I said that the program continued OK otherwise), not sure if there's anything useful there. I'm packaging up stuff in Docker now and will send shortly.

Also, I think I've found a workaround for me which was basically to go through and make the relevant parts of the code more type stable, which perhaps was to be expected.

@JeffBezanson
Copy link
Sponsor Member

@marius311 see if #21907 fixes the original code.

@marius311
Copy link
Contributor Author

Yep! That looks like it fixes my original bug. FWIW I rebased that commit onto 0.6rc1 b/c other stuff was broken otherwise, so I didn't technically check if it interacts with anything else that might be on master now. But in any case, thanks!

JeffBezanson added a commit that referenced this issue May 17, 2017
fix #21848, bug in widening done by limit_type_depth
tkelman pushed a commit that referenced this issue May 17, 2017
This would widen e.g. `Complex{T} where T` to `_ <: Complex`, which
is valid in some sense but yields a type that's not a supertype of
the input, which is bad.

(cherry picked from commit f46ba0a)
ref #21907
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
compiler:inference Type inference types and dispatch Types, subtyping and method dispatch
Projects
None yet
Development

No branches or pull requests

4 participants