E.g., while using Polynomials.jl
,
julia> @which promote_rule(Polynomial{Int}, Union{})
promote_rule(::Type{<:AbstractPolynomial{T}}, ::Type{<:AbstractPolynomial{S}}) where {T, S}
@ Polynomials ~/Dropbox/JuliaPackages/Polynomials.jl/src/common.jl:436
This issue arises because Union{}
is a subtype of every type, even of concrete types
julia> Union{} <: Polynomial{Int,Vector{Int}}
true
but I’m certain that the package developer didn’t mean to include Union{}
while defining the method.
This leads to invalidation, such as
inserting promote_rule(::Type{PQ}, ::Type{S}) where {T, X, P<:AbstractPolynomial{T, X}, PQ<:AbstractRationalFunction{T, X, P}, S<:Number} @ Polynomials ~/Dropbox/JuliaPackages/Polynomials.jl/src/rational-functions/common.jl:104 invalidated:
backedges: 1: superseding promote_rule(::Type{<:AbstractIrrational}, ::Type{T}) where T<:Real @ Base irrationals.jl:44 with MethodInstance for promote_rule(::Core.TypeofBottom, ::Type{UInt64}) (1 children)
2: superseding promote_rule(::Type, ::Type) @ Base promotion.jl:319 with MethodInstance for promote_rule(::Type{T} where T<:Unsigned, ::Type{UInt64}) (5 children)
36 mt_cache