Skip to content

--trace-compile outputs invalid precompile(...) for some Vararg signatures in 1.10 / 1.12 #58583

Open
@topolarity

Description

@topolarity

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

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions