Skip to content

Commit 3e6f607

Browse files
authored
don't use abstract_iteration for types with special cases in _apply (#30483)
1 parent 7ba11d1 commit 3e6f607

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

base/compiler/abstractinterpretation.jl

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -405,12 +405,27 @@ function precise_container_type(@nospecialize(typ), vtypes::VarTable, sv::Infere
405405
end
406406
end
407407
return result
408-
elseif isa(tti0, DataType) && tti0 <: Tuple
409-
if isvatuple(tti0) && length(tti0.parameters) == 1
410-
return Any[Vararg{unwrapva(tti0.parameters[1])}]
408+
elseif tti0 <: Tuple
409+
if isa(tti0, DataType)
410+
if isvatuple(tti0) && length(tti0.parameters) == 1
411+
return Any[Vararg{unwrapva(tti0.parameters[1])}]
412+
else
413+
return Any[ p for p in tti0.parameters ]
414+
end
415+
elseif !isa(tti, DataType)
416+
return Any[Vararg{Any}]
411417
else
412-
return Any[ p for p in tti0.parameters ]
418+
len = length(tti.parameters)
419+
last = tti.parameters[len]
420+
va = isvarargtype(last)
421+
elts = Any[ fieldtype(tti0, i) for i = 1:len ]
422+
if va
423+
elts[len] = Vararg{elts[len]}
424+
end
425+
return elts
413426
end
427+
elseif tti0 === SimpleVector || tti0 === Any
428+
return Any[Vararg{Any}]
414429
elseif tti0 <: Array
415430
return Any[Vararg{eltype(tti0)}]
416431
else

0 commit comments

Comments
 (0)