inference: concretize `invoke` callsite correctly (#46743)
It turns out that previously we didn't concretize `invoke` callsite
correctly, as we didn't take into account whether the call being
concretized is `invoke`-d or not, e.g.:
```
julia> invoke_concretized2(a::Int) = a > 0 ? :int : nothing
invoke_concretized2 (generic function with 1 method)
julia> invoke_concretized2(a::Integer) = a > 0 ? :integer : nothing
invoke_concretized2 (generic function with 2 methods)
julia> let
Base.Experimental.@force_compile
Base.@invoke invoke_concretized2(42::Integer)
end
:int # this should return `:integer` instead
```
This commit fixes that up by propagating information `invoke`-d callsite
to `concrete_eval_call`. Now we should be able to pass the following test cases:
```julia
invoke_concretized1(a::Int) = a > 0 ? :int : nothing
invoke_concretized1(a::Integer) = a > 0 ? "integer" : nothing
@test Base.infer_effects((Int,)) do a
@invoke invoke_concretized1(a::Integer)
end |> Core.Compiler.is_foldable
@test Base.return_types() do
@invoke invoke_concretized1(42::Integer)
end |> only === String
invoke_concretized2(a::Int) = a > 0 ? :int : nothing
invoke_concretized2(a::Integer) = a > 0 ? :integer : nothing
@test Base.infer_effects((Int,)) do a
@invoke invoke_concretized2(a::Integer)
end |> Core.Compiler.is_foldable
@test let
Base.Experimental.@force_compile
@invoke invoke_concretized2(42::Integer)
end === :integer
```