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

0.4: segfault in jl_method_table_assoc_exact #13510

Closed
dlfivefifty opened this issue Oct 9, 2015 · 5 comments
Closed

0.4: segfault in jl_method_table_assoc_exact #13510

dlfivefifty opened this issue Oct 9, 2015 · 5 comments
Labels
bug Indicates an unexpected problem or unintended behavior

Comments

@dlfivefifty
Copy link
Contributor

The following consistently causes a segfault in 0.4 final release (as well as 0.4-rc1), and the same line of gf.c. I created a branch of ApproxFun that shows the bug. Note that the --check-bounds=yes appears necessary to reproduce.

Pkg.add("ApproxFun")
Pkg.checkout("ApproxFun","bug-segfaultjl")
[Macintosh:~/.julia/v0.4/ApproxFun/test] solver% julia --check-bounds=yes
               _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: http://docs.julialang.org
   _ _   _| |_  __ _   |  Type "?help" for help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 0.4.0 (2015-10-08 06:20 UTC)
 _/ |\__'_|_|_|\__'_|  |  Official http://julialang.org/ release
|__/                   |  x86_64-apple-darwin13.4.0

julia> versioninfo()
Julia Version 0.4.0
Commit 0ff703b* (2015-10-08 06:20 UTC)
Platform Info:
  System: Darwin (x86_64-apple-darwin13.4.0)
  CPU: Intel(R) Core(TM) i7-3820QM CPU @ 2.70GHz
  WORD_SIZE: 64
  BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Sandybridge)
  LAPACK: libopenblas64_
  LIBM: libopenlibm
  LLVM: libLLVM-3.3

julia> using ApproxFun

julia> x=Fun(identity,[-1.,1.])
Fun([0.0,1.0],Chebyshev(【-1.0,1.0】))

julia> f=x+sin(2x)*sqrt(1-x^2)

signal (11): Segmentation fault: 11
jl_method_table_assoc_exact at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/gf.c:251
jl_apply_generic at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/gf.c:1663
maxspace at /Users/solver/.julia/v0.4/ApproxFun/src/Fun/Space.jl:230
union at /Users/solver/.julia/v0.4/ApproxFun/src/Fun/Space.jl:297
isconvertible at /Users/solver/.julia/v0.4/ApproxFun/src/Fun/Space.jl:311
jlcall_isconvertible_22217 at  (unknown line)
jl_apply at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/gf.c:1691
sumspacecoefficients at /Users/solver/.julia/v0.4/ApproxFun/src/Spaces/Modifier/Modifier.jl:102
coefficients at /Users/solver/.julia/v0.4/ApproxFun/src/Fun/Fun.jl:45
call at /Users/solver/.julia/v0.4/ApproxFun/src/Fun/constructors.jl:54
jlcall_call_22211 at  (unknown line)
jl_apply at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/gf.c:1691
+ at /Users/solver/.julia/v0.4/ApproxFun/src/Fun/Fun.jl:181
jl_apply at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/gf.c:1691
jl_apply at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/interpreter.c:55
eval at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/interpreter.c:213
eval at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/interpreter.c:219
eval_body at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/interpreter.c:592
jl_toplevel_eval_body at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/interpreter.c:527
jl_toplevel_eval_flex at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/toplevel.c:521
jl_toplevel_eval_in at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/builtins.c:579
eval_user_input at REPL.jl:62
jlcall_eval_user_input_21258 at  (unknown line)
jl_apply at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/./julia.h:1325
anonymous at REPL.jl:92
jl_apply at /Users/osx/buildbot/slave/package_osx10_9-x64/build/src/task.c:241
Segmentation fault: 11```


@vtjnash
Copy link
Member

vtjnash commented Oct 10, 2015

the code_typed results appear to be consistent with this being a duplicate of #9770

obligatory screen dump follows:

(lldb) p jl_(jl_eval_string("code_typed(ApproxFun.maxspace, (ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}, ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}} ))"))

Array{Any, 1}[Expr(:lambda, Array{Any, 1}[:a, :b], Array{Any, 1}[Array{Any, 1}[Array{Any, 1}[:a, ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}, 0], Array{Any, 1}[:b, ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, 0], Array{Any, 1}[:cr, Any, 2], Array{Any, 1}[:cspa, Union{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}}, 18], Array{Any, 1}[:#s75, Any, 2], Array{Any, 1}[:cspb, ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, 18], Array{Any, 1}[:#s74, Bool, 2], Array{Any, 1}[:##xs#9184, Tuple{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}}, 0], Array{Any, 1}[:##xs#9185, Tuple{ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}}, 0], Array{Any, 1}[:##xs#9186, Tuple{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}}, 0], Array{Any, 1}[:##xs#9187, Tuple{ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}}, 0]], Array{Any, 1}[], Array{Any, 1}[ApproxFun.Interval{Float64}, Bool], Array{Any, 1}[]], Expr(:body,
# line 225 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
<newvar :cr>,
<newvar :cspa>,
<newvar :#s75>,
<newvar :cspb>,
<newvar :#s74>,
Expr(:gotoifnot, Expr(:call, ApproxFun.spacescompatible, a::ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}, Expr(:call, :call, ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}, Expr(:call, Base.box, Float64, Expr(:call, Base.sitofp, Float64, 0)::Any)::Float64, Expr(:call, Base.box, Float64, Expr(:call, Base.sitofp, Float64, 0)::Any)::Float64, b::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}})::ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}})::Bool, 0)::Any,
# line 226 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
Expr(:return, a::ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}})::Any,
0:,
# line 229 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
:cr = Expr(:call, ApproxFun.maxspace_rule, a::ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}, b::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}})::Union{},
# line 230 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
Expr(:gotoifnot, Expr(:call, ApproxFun.!=, cr::Union{}, Expr(:new, Expr(:call, top(:getfield), ApproxFun, :NoSpace)::Type{ApproxFun.NoSpace})::ApproxFun.NoSpace)::Union{}, 1)::Any,
# line 231 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
Expr(:return, cr::Union{})::Any,
1:,
# line 234 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
:cr = Expr(:call, ApproxFun.maxspace_rule, b::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, a::ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}})::Union{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.NoSpace},
# line 235 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
Expr(:gotoifnot, Expr(:call, ApproxFun.!=, cr::Union{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.NoSpace}, Expr(:new, Expr(:call, top(:getfield), ApproxFun, :NoSpace)::Type{ApproxFun.NoSpace})::ApproxFun.NoSpace)::Bool, 2)::Any,
# line 236 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
Expr(:return, cr::Union{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.NoSpace})::Any,
2:,
# line 239 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
:cr = Expr(:call, ApproxFun.conversion_type, a::ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}, b::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}})::Any,
# line 240 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
Expr(:gotoifnot, Expr(:call, ApproxFun.==, :cr, a::ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}})::Any, 3)::Any,
# line 241 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
Expr(:return, b::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}})::Any,
goto 4,
3:,
# line 242 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
Expr(:gotoifnot, Expr(:call, ApproxFun.==, :cr, b::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}})::Any, 4)::Any,
# line 243 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
Expr(:return, a::ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}})::Any,
4:,
# line 247 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
:cspa = Expr(:call, ApproxFun.canonicalspace, a::ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}})::Union{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}},
# line 248 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
Expr(:gotoifnot, Expr(:call, ApproxFun.spacescompatible, cspa::Union{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}}, b::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}})::Bool, 5)::Any,
# line 251 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
Expr(:call, ApproxFun.error, Expr(:call, ApproxFun.*, "Override conversion_type or maxspace for ", Expr(:call, Base.print_to_string, a::ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}})::Union{UTF8String, ASCIIString}, " and ", Expr(:call, Base.print_to_string, b::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}})::Union{UTF8String, ASCIIString})::Union{UTF8String, ASCIIString})::Union{},
5:,
# line 253 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
Expr(:gotoifnot, Expr(:call, ApproxFun.!=, cspa::Union{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}}, a::ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}})::Bool, 6)::Any,
:#s75 = Expr(:call, ApproxFun.==, Expr(:call, ApproxFun.maxspace, cspa::Union{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}}, a::ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}})::Any, cspa::Union{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}})::Any,
goto 7,
6:,
:#s75 = false,
7:,
Expr(:gotoifnot, :#s75, 8)::Any,
# line 254 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
Expr(:return, Expr(:call, ApproxFun.maxspace, b::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, cspa::Union{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}})::Union{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.NoSpace})::Any,
8:,
# line 257 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
GenSym(0) = Expr(:call, top(:getfield), b::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, :domain)::ApproxFun.Interval{Float64},
:cspb = Expr(:new, ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, Expr(:new, ApproxFun.Interval{Float64}, Expr(:call, top(:getfield), GenSym(0), :a)::Float64, Expr(:call, top(:getfield), GenSym(0), :b)::Float64)::ApproxFun.Interval{Float64})::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}},
# line 258 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
Expr(:gotoifnot, Expr(:call, ApproxFun.spacescompatible, a::ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}, Expr(:call, :call, ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}, Expr(:call, Base.box, Float64, Expr(:call, Base.sitofp, Float64, 0)::Any)::Float64, Expr(:call, Base.box, Float64, Expr(:call, Base.sitofp, Float64, 0)::Any)::Float64, cspb::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}})::ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}})::Bool, 9)::Any,
# line 260 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
Expr(:call, ApproxFun.error, Expr(:call, ApproxFun.*, "Override conversion_type or maxspace for ", Expr(:call, Base.print_to_string, a::ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}})::Union{UTF8String, ASCIIString}, " and ", Expr(:call, Base.print_to_string, b::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}})::Union{UTF8String, ASCIIString})::Union{UTF8String, ASCIIString})::Union{},
9:,
# line 262 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
GenSym(1) = Expr(:call, Base.==, cspb::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, b::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}})::Bool,
Expr(:gotoifnot, Expr(:call, Base.box, Base.Bool, Expr(:call, Base.not_int, GenSym(1))::Any)::Bool, 10)::Any,
:#s74 = Expr(:call, ApproxFun.==, Expr(:call, ApproxFun.maxspace, cspb::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, b::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}})::Union{ApproxFun.NoSpace, ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}}, cspb::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}})::Bool,
goto 11,
10:,
:#s74 = false,
11:,
Expr(:gotoifnot, #s74::Bool, 12)::Any,
# line 263 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
Expr(:return, Expr(:call, ApproxFun.maxspace, a::ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}, cspb::ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}})::Union{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.NoSpace, ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}})::Any,
12:,
# line 266 /Users/jameson/.julia/v0.5/ApproxFun/src/Fun/Space.jl,
Expr(:return, Expr(:new, Expr(:call, top(:getfield), ApproxFun, :NoSpace)::Type{ApproxFun.NoSpace})::ApproxFun.NoSpace)::Any)::Union{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.NoSpace, ApproxFun.JacobiWeight{ApproxFun.Ultraspherical{0, ApproxFun.Interval{Float64}}, ApproxFun.Interval{Float64}}})::Any]

@JeffBezanson JeffBezanson added the bug Indicates an unexpected problem or unintended behavior label Oct 23, 2015
@kshyatt
Copy link
Contributor

kshyatt commented Nov 25, 2015

I can still reproduce this on 0.4.2.

@vtjnash
Copy link
Member

vtjnash commented Nov 25, 2015

yes, see PR #9926 for the probable fix

@dlfivefifty
Copy link
Contributor Author

I also was hit by this bug again in 0.4.2, but managed to work around it by redesigning the code. Though having to redesigning code around an obscure and slightly inconsistent bug is not exactly fun. Looking forward to PR #9926!

@vtjnash
Copy link
Member

vtjnash commented Jul 20, 2016

confirmed fixed on master

@vtjnash vtjnash closed this as completed Jul 20, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Indicates an unexpected problem or unintended behavior
Projects
None yet
Development

No branches or pull requests

4 participants