Extremely slow subtype query causes unreasonable compilation times #56606
Closed
Description
struct Closure{T,U} end
struct Pick{T} end
function muladd end
const A = Tuple{Tuple{Pick{1}, Closure{typeof(muladd), Tuple{Pick{2}, Pick{3}, Closure{typeof(muladd), Tuple{Pick{4}, Pick{5}, Closure{typeof(muladd), Tuple{Pick{6}, Pick{7}, Closure{typeof(muladd), Tuple{Pick{8}, Pick{9}, Closure{typeof(muladd), Tuple{Pick{10}, Pick{11}, Closure{typeof(muladd), Tuple{Pick{12}, Pick{13}, Closure{typeof(muladd), Tuple{Pick{14}, Pick{15}, Closure{typeof(muladd), Tuple{Pick{16}, Pick{17}, Closure{typeof(muladd), Tuple{Pick{18}, Pick{19}, Closure{typeof(muladd), Tuple{Pick{20}, Pick{21}, Closure{typeof(muladd), Tuple{Pick{22}, Pick{23}, Closure{typeof(muladd), Tuple{Pick{24}, Pick{25}, Closure{typeof(muladd), Tuple{Pick{26}, Pick{27}, Closure{typeof(muladd), Tuple{Pick{28}, Pick{29}, Closure{typeof(muladd), Tuple{Pick{30}, Pick{31}, Closure{typeof(muladd), Tuple{Pick{32}, Pick{33}, Closure{typeof(muladd), Tuple{Pick{34}, Pick{35}, Closure{typeof(muladd), Tuple{Pick{36}, Pick{37}, Closure{typeof(Base.:(*)), Tuple{Pick{38}, Pick{39}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, Pick{40}}, Int64}
const B = Tuple{Tuple{Pick, Closure{typeof(muladd), <:Tuple{Pick, Pick, Closure{typeof(muladd), <:Tuple{Pick, Pick, Closure{typeof(muladd), <:Tuple{Pick, Pick, Closure{typeof(muladd), <:Tuple{Pick, Pick, Closure{typeof(muladd), <:Tuple{Pick, Pick, Closure{typeof(muladd), <:Tuple{Pick, Pick, Closure{typeof(muladd), <:Tuple{Pick, Pick, Closure{typeof(muladd), <:Tuple{Pick, Pick, Closure{typeof(muladd), <:Tuple{Pick, Pick, Closure{typeof(muladd), <:Tuple{Pick, Pick, Closure{typeof(muladd), <:Tuple{Pick, Pick, Closure{typeof(muladd), <:Tuple{Pick, Pick, Closure{typeof(muladd), <:Tuple{Pick, Pick, Closure{typeof(muladd), <:Tuple{Pick, Pick, Closure{typeof(muladd), <:Tuple{Pick, Pick, Closure{typeof(muladd), <:Tuple{Pick, Pick, Closure{typeof(muladd), <:Tuple{Pick, Pick, Closure{typeof(muladd), <:Tuple{Pick, Pick, Closure{typeof(Base.:(*)), <:Tuple{Pick, Pick}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}, Pick}, Int64}
println(A <: B) # takes a very, very long time... (>10 minutes)
This subtyping query is the root cause of the compilation blow-up in SciML/OrdinaryDiffEq.jl#2535