From 68bbfd70091764e0aea917278f568af7f573922a Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Wed, 19 Apr 2023 11:06:57 -0400 Subject: [PATCH] fix regression in methods lookup Certain queries were searching for Type{T} instead of T due to a mistaken tparam setting, resulting in missing methods in lookup. Fix #49408 Ref #48925 --- src/typemap.c | 2 +- test/reflection.jl | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/typemap.c b/src/typemap.c index bd9fd00f06815..e60f3d566284e 100644 --- a/src/typemap.c +++ b/src/typemap.c @@ -425,7 +425,7 @@ static int jl_typemap_intersection_array_visitor(jl_array_t *a, jl_value_t *ty, if (tydt == jl_any_type || // easy case: Any always matches tname_intersection(tydt, (jl_typename_t*)t, height)) { if (jl_is_array(ml)) { - if (!jl_typemap_intersection_array_visitor((jl_array_t*)ml, ty, 1, offs, closure)) + if (!jl_typemap_intersection_array_visitor((jl_array_t*)ml, ty, tparam & ~2, offs, closure)) goto exit; } else { diff --git a/test/reflection.jl b/test/reflection.jl index 3797cab1e5465..8fdfa5be0b57c 100644 --- a/test/reflection.jl +++ b/test/reflection.jl @@ -1038,6 +1038,10 @@ ambig_effects_test(a, b) = 1 end @test Base._methods_by_ftype(Tuple{}, -1, Base.get_world_counter()) == Any[] +@test length(methods(Base.Broadcast.broadcasted, Tuple{Any, Any, Vararg})) > + length(methods(Base.Broadcast.broadcasted, Tuple{Base.Broadcast.BroadcastStyle, Any, Vararg})) >= + length(methods(Base.Broadcast.broadcasted, Tuple{Base.Broadcast.DefaultArrayStyle{1}, Any, Vararg})) >= + 10 @testset "specializations" begin f(x) = 1