@@ -2334,11 +2334,16 @@ end
23342334function abstract_call_opaque_closure (interp:: AbstractInterpreter ,
23352335 closure:: PartialOpaque , arginfo:: ArgInfo , si:: StmtInfo , sv:: AbsIntState , check:: Bool = true )
23362336 sig = argtypes_to_type (arginfo. argtypes)
2337- result = abstract_call_method (interp, closure. source:: Method , sig, Core. svec (), false , si, sv)
2338- (; rt, edge, effects, volatile_inf_result) = result
23392337 tt = closure. typ
2340- sigT = (unwrap_unionall (tt):: DataType ). parameters[1 ]
2341- match = MethodMatch (sig, Core. svec (), closure. source, sig <: rewrap_unionall (sigT, tt))
2338+ ocargsig = rewrap_unionall ((unwrap_unionall (tt):: DataType ). parameters[1 ], tt)
2339+ ocargsig′ = unwrap_unionall (ocargsig)
2340+ ocargsig′ isa DataType || return CallMeta (Any, Any, Effects (), NoCallInfo ())
2341+ ocsig = rewrap_unionall (Tuple{Tuple, ocargsig′. parameters... }, ocargsig)
2342+ hasintersect (sig, ocsig) || return CallMeta (Union{}, TypeError, EFFECTS_THROWS, NoCallInfo ())
2343+ ocmethod = closure. source:: Method
2344+ result = abstract_call_method (interp, ocmethod, sig, Core. svec (), false , si, sv)
2345+ (; rt, edge, effects, volatile_inf_result) = result
2346+ match = MethodMatch (sig, Core. svec (), ocmethod, sig <: ocsig )
23422347 𝕃ₚ = ipo_lattice (interp)
23432348 ⊑ ₚ = ⊑ (𝕃ₚ)
23442349 const_result = volatile_inf_result
0 commit comments