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

Internal error: StackOverflowError() #26665

Closed
thofma opened this issue Mar 30, 2018 · 14 comments · Fixed by #28517
Closed

Internal error: StackOverflowError() #26665

thofma opened this issue Mar 30, 2018 · 14 comments · Fixed by #28517
Labels
domain:types and dispatch Types, subtyping and method dispatch

Comments

@thofma
Copy link
Contributor

thofma commented Mar 30, 2018

I was testing https://github.com/Nemocas/AbstractAlgebra.jl on 0.7 and ran into the following issue on

julia> versioninfo()
Julia Version 0.7.0-DEV.4722
Commit 8a5f747 (2018-03-29 19:53 UTC)
DEBUG build
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-3.9.1 (ORCJIT, ivybridge)
Environment:
julia> Pkg.add("AbstractAlgebra")

The following works fine:

julia> using AbstractAlgebra
...
julia> R, x = PolynomialRing(ZZ, "x");

julia> f = R(1);

julia> g = R(1);

julia> q, r = pseudodivrem(f, g);

If you put it in a function, julia maxes out the CPU for a few minutes and throws a StackOverFlow():

julia> function h()
         R, x = PolynomialRing(ZZ, "x")
         f = R(1)
         g = R(1)
         q, r = pseudodivrem(f, g)
       end
h (generic function with 1 method)

julia> h()
Internal error: encountered unexpected error in runtime:
StackOverflowError()
check_datatype_parameters at /home/thofmann/julia/juliadev/src/jltypes.c:1008
inst_datatype_inner at /home/thofmann/julia/juliadev/src/jltypes.c:1122
inst_datatype_env at /home/thofmann/julia/juliadev/src/jltypes.c:1306
inst_datatype_env at /home/thofmann/julia/juliadev/src/jltypes.c:1310
inst_datatype_env at /home/thofmann/julia/juliadev/src/jltypes.c:1310
inst_datatype at /home/thofmann/julia/juliadev/src/jltypes.c:1316
inst_type_w_ at /home/thofmann/julia/juliadev/src/jltypes.c:1507
inst_all at /home/thofmann/julia/juliadev/src/jltypes.c:1358
inst_datatype_inner at /home/thofmann/julia/juliadev/src/jltypes.c:1271
inst_datatype_env at /home/thofmann/julia/juliadev/src/jltypes.c:1306
inst_datatype_env at /home/thofmann/julia/juliadev/src/jltypes.c:1310
inst_datatype at /home/thofmann/julia/juliadev/src/jltypes.c:1316
inst_type_w_ at /home/thofmann/julia/juliadev/src/jltypes.c:1507
jl_instantiate_unionall at /home/thofmann/julia/juliadev/src/jltypes.c:937
rename_unionall at /home/thofmann/julia/juliadev/src/subtype.c:374
subtype_unionall at /home/thofmann/julia/juliadev/src/subtype.c:582
...
jl_interpret_toplevel_thunk_callback at /home/thofmann/julia/juliadev/src/interpreter.c:759
unknown function (ip: 0xfffffffffffffffe)
unknown function (ip: 0x7fce578b690f)
unknown function (ip: 0xffffffffffffffff)
jl_interpret_toplevel_thunk at /home/thofmann/julia/juliadev/src/interpreter.c:768
jl_toplevel_eval_flex at /home/thofmann/julia/juliadev/src/toplevel.c:816
jl_toplevel_eval at /home/thofmann/julia/juliadev/src/toplevel.c:829
jl_toplevel_eval_in at /home/thofmann/julia/juliadev/src/builtins.c:624
eval at ./boot.jl:309 [inlined]
eval at /home/thofmann/julia/juliadev/usr/share/julia/site/v0.7/REPL/src/REPL.jl:5
jl_call_fptr_internal at /home/thofmann/julia/juliadev/src/julia_internal.h:383
jl_call_method_internal at /home/thofmann/julia/juliadev/src/julia_internal.h:402
jl_apply_generic at /home/thofmann/julia/juliadev/src/gf.c:2100
eval_user_input at /home/thofmann/julia/juliadev/usr/share/julia/site/v0.7/REPL/src/REPL.jl:86
jl_call_fptr_internal at /home/thofmann/julia/juliadev/src/julia_internal.h:383
jl_call_method_internal at /home/thofmann/julia/juliadev/src/julia_internal.h:402
jl_apply_generic at /home/thofmann/julia/juliadev/src/gf.c:2100
macro expansion at /home/thofmann/julia/juliadev/usr/share/julia/site/v0.7/REPL/src/REPL.jl:117 [inlined]
#28 at ./event.jl:92
jl_call_fptr_internal at /home/thofmann/julia/juliadev/src/julia_internal.h:383
jl_call_method_internal at /home/thofmann/julia/juliadev/src/julia_internal.h:402
jl_apply_generic at /home/thofmann/julia/juliadev/src/gf.c:2100
jl_apply at /home/thofmann/julia/juliadev/src/julia.h:1529
start_task at /home/thofmann/julia/juliadev/src/task.c:268
unknown function (ip: 0xffffffffffffffff)
(1, 0)

See (https://gist.github.com/thofma/c6a252bce24f970940f7effa413ed792) for the full stacktrace.

Note that everything works fine on 0.6.2. I also looked at the subtyping/stack overflow issues, but the stacktraces looked different.

@JeffBezanson JeffBezanson added the domain:types and dispatch Types, subtyping and method dispatch label Apr 2, 2018
@thofma
Copy link
Contributor Author

thofma commented May 24, 2018

Still an issue with latest master version.

@wbhart
Copy link

wbhart commented Aug 7, 2018

This is still an issue with 0.7-rc2. I have written a very qualitative description of when we seem to encounter the issue (which is now a hang rather than a segfault, depending on where we run it), in my third post on the thread here [1].

The issue is a showstopper for us, as it occurs widely across our package. It's not an isolated corner case, though it is somehow related to the complexity of the types that can be built up. We don't believe it can be triggered on fairly simple types or with a fairly simple method table.

We are trying to find a more minimal example, separated from AbstractAlgebra.jl, though this seems to be hard to do due to the nature of the bug.

[1] https://discourse.julialang.org/t/tests-do-not-start-after-some-minutes/12503

@StefanKarpinski
Copy link
Sponsor Member

Can you post a manifest file?

@JeffBezanson JeffBezanson added this to the 1.0.x milestone Aug 7, 2018
@JeffBezanson
Copy link
Sponsor Member

Thanks for bumping this. As long as we have some way to reproduce it we can make progress.

@StefanKarpinski
Copy link
Sponsor Member

I can reproduce this locally but there are a lot of deprecation warnings. It's hard not to wonder if fixing the depreciation warnings might make this issue go away. Do you have a version with the deprecations fixed?

@wbhart
Copy link

wbhart commented Aug 7, 2018

We don't have a version without the deprecation warnings. I don't think they are relevant, but we will check as soon as we can, to make sure. The issue arises because of a hang in type inference, to do with unions of abstract types and concrete types, as far as we can tell. So I think it is fairly fundamental.

Was the manifest question (which I am not yet familiar with) just to be able to reproduce the issue?

@StefanKarpinski
Copy link
Sponsor Member

Was the manifest question (which I am not yet familiar with) just to be able to reproduce the issue?

Yes; not necessary since I managed to reproduce it. Here's the manifest that I reproduced it with:

[[AbstractAlgebra]]
deps = ["Test"]
path = "/Users/stefan/dev/AbstractAlgebra"
uuid = "c3fe647b-3220-5bb0-a1ea-a7954cac585d"
version = "0.0.9+"

[[Base64]]
uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"

[[Distributed]]
deps = ["LinearAlgebra", "Random", "Serialization", "Sockets"]
uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"

[[InteractiveUtils]]
deps = ["LinearAlgebra", "Markdown"]
uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"

[[Libdl]]
uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"

[[LinearAlgebra]]
deps = ["Libdl"]
uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"

[[Logging]]
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"

[[Markdown]]
deps = ["Base64"]
uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"

[[Random]]
deps = ["Serialization"]
uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"

[[Serialization]]
uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"

[[Sockets]]
uuid = "6462fe0b-24de-5631-8697-dd941f90decc"

[[Test]]
deps = ["Distributed", "InteractiveUtils", "Logging", "Random"]
uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

@KristofferC
Copy link
Sponsor Member

Would be good to have the Project file as way just for convenience

@StefanKarpinski
Copy link
Sponsor Member

[deps]
AbstractAlgebra = "c3fe647b-3220-5bb0-a1ea-a7954cac585d"

@vtjnash
Copy link
Sponsor Member

vtjnash commented Aug 7, 2018

What a beautiful type:

Tuple{typeof(Base.:(*)), T, AbstractAlgebra.Generic.SparsePoly{T}} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer})))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

@JeffBezanson
Copy link
Sponsor Member

As a lisper, I can say it definitely almost has enough close parentheses.

@wbhart
Copy link

wbhart commented Aug 7, 2018 via email

@StefanKarpinski
Copy link
Sponsor Member

Recursion is not a crime.

couldn't agree more :)

@vtjnash
Copy link
Sponsor Member

vtjnash commented Aug 7, 2018

I see what's wrong and have started work on a fix. Here's the shape of the recursion limiting results:

sig = Tuple{typeof(Base.:(*)), T, AbstractAlgebra.Generic.SparsePoly{T}} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer})))))

comparison = Tuple{typeof(Base.:(*)), T, AbstractAlgebra.Generic.SparsePoly{T}} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}))))

callstack:
*(T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer})))), AbstractAlgebra.Generic.SparsePoly{T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}))))}) where {T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}))))} [limited]
*(AbstractAlgebra.Generic.SparsePoly{T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}}, AbstractAlgebra.Generic.SparsePoly{T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}}) where {T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}}
*(AbstractAlgebra.Generic.SparsePoly{T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer})}, T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer})) where {T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer})}
*(T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}))), AbstractAlgebra.Generic.SparsePoly{T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer})))}) where {T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer})))} [limited]
*(T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}), AbstractAlgebra.Generic.SparsePoly{T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer})}) where {T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer})}
*(AbstractAlgebra.Generic.SparsePoly{T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}))}, T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}))) where {T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}))} [limited]
*(AbstractAlgebra.Generic.SparsePoly{T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer})}, AbstractAlgebra.Generic.SparsePoly{T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer})}) where {T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer})} [limited]
*(T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer})), AbstractAlgebra.Generic.SparsePoly{T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}))}) where {T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}))} [limited]
*(T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer})))), AbstractAlgebra.Generic.SparsePoly{T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}))))}) where {T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:(AbstractAlgebra.Generic.SparsePoly{T} where T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}))))} [limited]
addmul!(AbstractAlgebra.Generic.SparsePoly{T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}}, AbstractAlgebra.Generic.SparsePoly{T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}}, AbstractAlgebra.Generic.SparsePoly{T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}}, AbstractAlgebra.Generic.SparsePoly{T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}}) where {T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}}
pseudodivrem(AbstractAlgebra.Generic.SparsePoly{T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}}, AbstractAlgebra.Generic.SparsePoly{T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}}) where {T<:Union{AbstractAlgebra.RingElem, AbstractFloat, Integer, Base.Rational{T} where T<:Integer}}

vtjnash added a commit that referenced this issue Aug 8, 2018
There's several related issues here:

1. Covariant kinds provide no meaningful information for the type size
limit heuristic. We should be just ignoring those and walking through to
the actual structural information of any real substance.
This seems to also make type_more_complex, _limit_type_size, and
is_derived_type more similar, which is probably always preferable.

2. Allowing type intersection to revise our type later can
cause it to reintroduce complexity (constraints) according to our metric,
while we want to only move up the type-hierarchy,
which can allow us to accidentally escape from the limit.
So if we've limited the type, we don't want to use a different type
that was derived by type-intersection and may not have our limits
applied anymore.

3. Inside `is_derived_type`, the var field of a UnionAll
should not increase the nesting depth, since `T<:(Ref{S} where S<:Any)`,
should observe the same depth as `{S<:Any, T<:Ref{S}}`.

fix #26665
Keno pushed a commit that referenced this issue Aug 8, 2018
There's several related issues here:

1. Covariant kinds provide no meaningful information for the type size
limit heuristic. We should be just ignoring those and walking through to
the actual structural information of any real substance.
This seems to also make type_more_complex, _limit_type_size, and
is_derived_type more similar, which is probably always preferable.

2. Allowing type intersection to revise our type later can
cause it to reintroduce complexity (constraints) according to our metric,
while we want to only move up the type-hierarchy,
which can allow us to accidentally escape from the limit.
So if we've limited the type, we don't want to use a different type
that was derived by type-intersection and may not have our limits
applied anymore.

3. Inside `is_derived_type`, the var field of a UnionAll
should not increase the nesting depth, since `T<:(Ref{S} where S<:Any)`,
should observe the same depth as `{S<:Any, T<:Ref{S}}`.

fix #26665
KristofferC pushed a commit that referenced this issue Feb 11, 2019
There's several related issues here:

1. Covariant kinds provide no meaningful information for the type size
limit heuristic. We should be just ignoring those and walking through to
the actual structural information of any real substance.
This seems to also make type_more_complex, _limit_type_size, and
is_derived_type more similar, which is probably always preferable.

2. Allowing type intersection to revise our type later can
cause it to reintroduce complexity (constraints) according to our metric,
while we want to only move up the type-hierarchy,
which can allow us to accidentally escape from the limit.
So if we've limited the type, we don't want to use a different type
that was derived by type-intersection and may not have our limits
applied anymore.

3. Inside `is_derived_type`, the var field of a UnionAll
should not increase the nesting depth, since `T<:(Ref{S} where S<:Any)`,
should observe the same depth as `{S<:Any, T<:Ref{S}}`.

fix #26665
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
domain:types and dispatch Types, subtyping and method dispatch
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants