Skip to content

Commit bfeaa27

Browse files
committed
fix exct for mismatched opaque closure call
1 parent 04d6d5f commit bfeaa27

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

base/compiler/abstractinterpretation.jl

+1-1
Original file line numberDiff line numberDiff line change
@@ -2339,7 +2339,7 @@ function abstract_call_opaque_closure(interp::AbstractInterpreter,
23392339
ocargsig′ = unwrap_unionall(ocargsig)
23402340
ocargsig′ isa DataType || return CallMeta(Any, Any, Effects(), NoCallInfo())
23412341
ocsig = rewrap_unionall(Tuple{Tuple, ocargsig′.parameters...}, ocargsig)
2342-
hasintersect(sig, ocsig) || return CallMeta(Union{}, TypeError, EFFECTS_THROWS, NoCallInfo())
2342+
hasintersect(sig, ocsig) || return CallMeta(Union{}, Union{MethodError,TypeError}, EFFECTS_THROWS, NoCallInfo())
23432343
ocmethod = closure.source::Method
23442344
result = abstract_call_method(interp, ocmethod, sig, Core.svec(), false, si, sv)
23452345
(; rt, edge, effects, volatile_inf_result) = result

test/compiler/inference.jl

+8
Original file line numberDiff line numberDiff line change
@@ -6089,3 +6089,11 @@ end == Union{}
60896089
f = issue55627_make_oc()
60906090
return f(1), f(xs...)
60916091
end == Tuple{Int,Int}
6092+
@test Base.infer_exception_type() do
6093+
f = issue55627_make_oc()
6094+
return f(1), f()
6095+
end >: MethodError
6096+
@test Base.infer_exception_type() do
6097+
f = issue55627_make_oc()
6098+
return f(1), f('1')
6099+
end >: TypeError

0 commit comments

Comments
 (0)