@@ -1402,8 +1402,9 @@ function matching_cache_argtypes(𝕃::AbstractLattice, mi::MethodInstance,
1402
1402
if slotid != = nothing
1403
1403
# using union-split signature, we may be able to narrow down `Conditional`
1404
1404
sigt = widenconst (slotid > nargs ? argtypes[slotid] : cache_argtypes[slotid])
1405
- thentype = tmeet (cnd. thentype, sigt)
1406
- elsetype = tmeet (cnd. elsetype, sigt)
1405
+ ⊓ = meet (𝕃)
1406
+ thentype = cnd. thentype ⊓ sigt
1407
+ elsetype = cnd. elsetype ⊓ sigt
1407
1408
if thentype === Bottom && elsetype === Bottom
1408
1409
# we accidentally proved this method match is impossible
1409
1410
# TODO bail out here immediately rather than just propagating Bottom ?
@@ -2119,7 +2120,7 @@ function abstract_call_builtin(interp::AbstractInterpreter, f::Builtin, (; fargs
2119
2120
else
2120
2121
thentype = form_partially_defined_struct (argtype2, argtypes[3 ])
2121
2122
if thentype != = nothing
2122
- elsetype = argtype2
2123
+ elsetype = widenslotwrapper ( argtype2)
2123
2124
if rt === Const (false )
2124
2125
thentype = Bottom
2125
2126
elseif rt === Const (true )
@@ -2210,7 +2211,7 @@ function abstract_call_unionall(interp::AbstractInterpreter, argtypes::Vector{An
2210
2211
return CallMeta (ret, Any, Effects (EFFECTS_TOTAL; nothrow), call. info)
2211
2212
end
2212
2213
2213
- function ci_abi (ci:: CodeInstance )
2214
+ function get_ci_abi (ci:: CodeInstance )
2214
2215
def = ci. def
2215
2216
isa (def, ABIOverride) && return def. abi
2216
2217
(def:: MethodInstance ). specTypes
@@ -2233,7 +2234,7 @@ function abstract_invoke(interp::AbstractInterpreter, arginfo::ArgInfo, si::Stmt
2233
2234
if isa (method_or_ci, CodeInstance)
2234
2235
our_world = sv. world. this
2235
2236
argtype = argtypes_to_type (pushfirst! (argtype_tail (argtypes, 4 ), ft))
2236
- specsig = ci_abi (method_or_ci)
2237
+ specsig = get_ci_abi (method_or_ci)
2237
2238
defdef = get_ci_mi (method_or_ci). def
2238
2239
exct = method_or_ci. exctype
2239
2240
if ! hasintersect (argtype, specsig)
@@ -3229,7 +3230,7 @@ function abstract_eval_isdefined_expr(interp::AbstractInterpreter, e::Expr, ssta
3229
3230
elseif ! vtyp. undef
3230
3231
rt = Const (true ) # definitely assigned previously
3231
3232
else # form `Conditional` to refine `vtyp.undef` in the then branch
3232
- rt = Conditional (sym, vtyp. typ, vtyp. typ; isdefined= true )
3233
+ rt = Conditional (sym, widenslotwrapper ( vtyp. typ), widenslotwrapper ( vtyp. typ) ; isdefined= true )
3233
3234
end
3234
3235
return RTEffects (rt, Union{}, EFFECTS_TOTAL)
3235
3236
end
@@ -3497,7 +3498,7 @@ function merge_override_effects!(interp::AbstractInterpreter, effects::Effects,
3497
3498
# N.B.: We'd like deleted_world here, but we can't add an appropriate edge at this point.
3498
3499
# However, in order to reach here in the first place, ordinary method lookup would have
3499
3500
# had to add an edge and appropriate invalidation trigger.
3500
- valid_worlds = WorldRange (m. primary_world, typemax (Int ))
3501
+ valid_worlds = WorldRange (m. primary_world, typemax (UInt ))
3501
3502
if sv. world. this in valid_worlds
3502
3503
update_valid_age! (sv, valid_worlds)
3503
3504
else
0 commit comments