Open
Description
On 1.10, we end up emitting a non-compileable sig for --trace-compile
:
$ julia +1.10 -q --trace-compile=stderr
julia> struct Foo end
julia> Base.string(::Foo, ::Foo, ::Foo, ::Foo) = ""
julia> string(:foo, "bar", "baz", "quaz", "quaf", "quaz");
precompile(Tuple{typeof(Base.string), Symbol, String, Vararg{String}})
julia> precompile(Tuple{typeof(Base.string), Symbol, String, Vararg{String}})
false
julia> precompile(Tuple{typeof(Base.string), Symbol, String, String, String, String, Vararg{String}})
precompile(Tuple{typeof(Base.string), Symbol, String, String, String, String, Vararg{String}})
true
The signature Tuple{typeof(Base.string), Symbol, String, Vararg{String}}
was under-specialized (it is not a compilable sig, due to the max_varargs
heuristic).
Works fine on 1.11:
$ julia +1.11 -q --trace-compile=stderr
julia> struct Foo end
julia> Base.string(::Foo, ::Foo, ::Foo, ::Foo) = ""
julia> string(:foo, "bar", "baz", "quaz", "quaf", "quaz");
precompile(Tuple{typeof(Base.string), Symbol, String, String, String, String, Vararg{String}})
But not on 1.12:
$ julia +1.11 -q --trace-compile=stderr
julia> struct Foo end
julia> Base.string(::Foo, ::Foo, ::Foo, ::Foo) = ""
julia> string(:foo, "bar", "baz", "quaz", "quaf", "quaz");
precompile(Tuple{typeof(Base.string), Symbol, String, Vararg{String}})
Metadata
Metadata
Assignees
Labels
No labels