Description
This is a more complicated case than #13183, and its root cause seems to be different since it persists after 9f72db1. But if you're interested in squashing these, here's an interesting case: given two Number
wrappers that are themselves numbers and promote numbers to their type, we get an infinite recursion in the compiler/inference if they ever come into contact with each other:
immutable SIQuantity{T<:Number} <: Number; end
Base.promote_rule{T, S}(::Type{SIQuantity{T}}, ::Type{SIQuantity{S}}) = SIQuantity{promote_type(T,S)}
Base.promote_rule{T, S<:Number}(::Type{SIQuantity{T}}, ::Type{S}) = SIQuantity{promote_type(T,S)}
immutable Interval{T<:Number} <: Number; end
Base.promote_rule{T, S}(::Type{Interval{T}}, ::Type{Interval{S}}) = Interval{promote_type(T,S)}
Base.promote_rule{T, S<:Number}(::Type{Interval{T}}, ::Type{S}) = Interval{promote_type(T,S)}
# note that promote_rule can hide the ambiguity here; no warnings are thrown
julia> promote_type(Interval{Int}, SIQuantity{Int})
^C^C^C
signal (11): Segmentation fault: 11
jl_is_type at /Users/mbauman/Code/julia-0.4/src/jltypes.c:68
arg_type_tuple at /Users/mbauman/Code/julia-0.4/src/gf.c:1384
jl_apply_generic at /Users/mbauman/Code/julia-0.4/src/gf.c:1688
promote_type at promotion.jl:119
jl_apply at /Users/mbauman/Code/julia-0.4/src/gf.c:1691
jl_apply at /Users/mbauman/Code/julia-0.4/src/./julia.h:1332
abstract_call_gf at ./inference.jl:659
abstract_call at ./inference.jl:877
abstract_eval_call at ./inference.jl:932
abstract_eval at ./inference.jl:959
abstract_eval_call at ./inference.jl:904
abstract_eval at ./inference.jl:959
typeinf_uncached at ./inference.jl:1620
jlcall_typeinf_uncached_36 at /Users/mbauman/Code/julia-0.4/usr/lib/julia/sys.dylib (unknown line)
typeinf at ./inference.jl:1337
jlcall_typeinf_4 at /Users/mbauman/Code/julia-0.4/usr/lib/julia/sys.dylib (unknown line)
typeinf at ./inference.jl:1287
abstract_call_gf at ./inference.jl:737
abstract_call at ./inference.jl:877
abstract_eval_call at ./inference.jl:932
abstract_eval at ./inference.jl:959
abstract_eval_call at ./inference.jl:904
abstract_eval at ./inference.jl:959
…