Skip to content

Drop support for versions of Julia lower than v1.6 #985

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Feb 21, 2022

Conversation

thchr
Copy link
Collaborator

@thchr thchr commented Jan 6, 2022

We discussed this briefly on Slack: now that the new Julia LTS is v1.6, it would make sense to drop support for earlier versions. There's at least two good reasons for doing so:

  1. CI takes forever to run when it needs to go through so many Julia versions.
  2. Development becomes tedious and somewhat fragile because one has to guard what may or may not work on different Julia versions. As a result, there's a lot of VERSION checks in StaticArrays currently (in source files and in tests).

I'm putting this up mainly for discussion - but the relevant bits to actually do this should also be here and are split across independent commits.

I also bumped the minor version of StaticArrays to v1.4: quoting @c42f from Slack:

[...] we can release patches versions 1.3.x if really necessary for older Julia versions.

One obvious counter-point is that this could cause a lot of downstream "noise" for packages that try to support pre-LTS versions of Julia. A similar fear could be that this could cause some fracturing of the compat versions of StaticArrays in the ecosystem, which could lead to compat conflicts.
Conversely, since StaticArrays is so widely used, this could also be seen as good thing, in that it would help speed up a broader transition to move on to v1.6+.

thchr added 4 commits January 6, 2022 13:37
- I actually don't understand this one: it was previously bounded to _below_ v1.5 - but that would indicate we assume allocations on later versions?
@thchr thchr requested a review from c42f January 6, 2022 19:06
@thchr
Copy link
Collaborator Author

thchr commented Jan 6, 2022

Incidentally, this also includes the same fix as in #970 (i.e. bump docs versioning to 1.6).

Copy link
Member

@c42f c42f left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is a good step, letting the implementation move forward more freely now that 1.6 is the new LTS.

# TODO: Revisit and fix. See
# https://github.com/JuliaLang/julia/pull/36962
# https://github.com/JuliaLang/julia/issues/36951
@test_broken length(detect_ambiguities(#=LinearAlgebra, =#StaticArrays)) <= allowable_ambiguities
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems a pity to have this turned off entirely, is there some reasonable nonzero value we can still set this to?

Upstream did seemingly break this test without obvious recourse, so if ignoring this is the best we can do, so be it.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Currently we have:

length(detect_ambiguities(StaticArrays))                # = 49 on v1.6.5 and 48 on v1.7.1
length(detect_ambiguities(LinearAlgebra, StaticArrays)) # = 49 on v1.6.5 and 48 on v1.7.1

I'm not sure why the LinearAlgebra thing was commented out.

48 is of course a lot higher than the small numbers that were given for earlier versions before - but I don't understand what made this code and branching on versions necessary in the first place; presumably one of those PRs linked above.

If we want something we could set it to e.g. 55 - then we'd at least be told if things suddenly increase a lot. We could also set it lower/higher, depending on tastes?

Copy link
Collaborator Author

@thchr thchr Jan 18, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Heh... I rebased this PR just now and that increased the number of ambiguities from 49 to 61 (on v1.6)...
So, yeah, there's some downside to not tracking it I guess.

EDIT: Seems the real explanation actually is that I'm seeing 49 ambiguities when I run:

using Test, StaticArrays
detect_ambiguities(StaticArrays)

But there's 61 ambiguities when running the test suite: I wonder how that happens; somehow, something in the tests introduce additional ambiguities.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A follow-up on the difference of ambiguity counts. Turns out there's two earlier @testsets which define new structs that add to the ambiguity count. Specifically, this happens here:

I.e., the test suite itself adds extra ambiguities: this is probably undesirable, but also an issue that adding certain subtypes of FieldVector and FieldMatrix introduces new ambiguities.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For this PR, I just updated the numbers to 61 (v1.6) and 60 (v1.7). I also made the change that the ambiguity check should be ensure unchanged number ambiguities. If a change decreases the number of ambiguities, it should decrease the values in /test/ambiguities.jl accordingly.

Probably, it would be good with some ambiguity hunting at some point...

@hyrodium
Copy link
Collaborator

@c42f Could you remove some required tests such as Julia 1.0? It seems that @thchr and I don't have permission to edit them.

image

@c42f
Copy link
Member

c42f commented Jan 13, 2022

Good point, I turned those off for now.

@c42f
Copy link
Member

c42f commented Jan 24, 2022

@andyferris @mateuszbaran — unless you foresee any big problems with this, I think we should merge it soon.

I've a small worry that it could bifurcate the ecosystem a bit with respect to requiring Julia 1.6, due to dependees inadvertently requiring the latest version of StaticArrays. But there's not really a lot we can do about this, other than continuing to support older versions of Julia indefinitely.

@thchr
Copy link
Collaborator Author

thchr commented Jan 24, 2022

One thing I wanted to ask about: CI got stuck on the benchmarks which ran forever - is that something to be worried about?
(I changed the benchmarks to run on v1.6 in this PR, so might be related?)

@c42f
Copy link
Member

c42f commented Jan 25, 2022

CI got stuck on the benchmarks which ran forever - is that something to be worried about?

That does seem a bit problematic. Does it run fine for you locally?

@thchr
Copy link
Collaborator Author

thchr commented Jan 25, 2022

CI got stuck on the benchmarks which ran forever - is that something to be worried about?

That does seem a bit problematic. Does it run fine for you locally?

Tried just now: include("benchmarks.jl") works fine locally (~5-10 min on my laptop - thought it would've been more?).

@c42f
Copy link
Member

c42f commented Jan 25, 2022

I've kicked off the benchmarks again in CI — I guess we'll see whether it's a transient failure.

@mateuszbaran
Copy link
Collaborator

@andyferris @mateuszbaran — unless you foresee any big problems with this, I think we should merge it soon.

I think merging this is fine, though I'm not certain if it's worth it. For me continuing support for Julia 1.0 didn't introduce any significant issues but after this change patching the Julia 1.0-compatible version will be more convoluted. Older versions of Julia sometimes had random CI failures (IIRC mostly 1.3) so we could just drop support for Julia 1.1 to 1.5 with nearly no impact on the ecosystem and cleaner CI. Anyway, these are not big problems and I'm fine with dropping support for Julia 1.0.

@thchr
Copy link
Collaborator Author

thchr commented Jan 25, 2022

The benchmark CI timed out again. Ideas?

@c42f
Copy link
Member

c42f commented Jan 27, 2022

I'm not sure what's going on with the benchmarks — will need some experimentation. They seem to start fine, then get stuck in judge, at least according to the logs:

  (2/9) benchmarking "exp"...
    (1/6) benchmarking "20"...
      (1/2) benchmarking "Matrix"...
      done (took 4.257159165 seconds)
      (2/2) benchmarking "SMatrix"...
[ Info: 210 minutes 3 seconds passed.  Still running `judge`...
[ Info: 215 minutes 3 seconds passed.  Still running `judge`...
[ Info: 220 minutes 3 seconds passed.  Still running `judge`...

It seems that there's a way to interactively debug github actions by getting an interactive shell on the code runner, so I'd suggest trying that out: https://github.com/marketplace/actions/debugging-with-tmate

@hyrodium
Copy link
Collaborator

I have just triggered the Benchmark CI again, and it now passed.
Note that the CI still takes time:

@thchr
Copy link
Collaborator Author

thchr commented Feb 18, 2022

Thanks for picking this up and checking CI again @hyrodium.

Looking at the logs, and as also highlighted by @c42f, the issue is that exp(::SMatrix) is very slow to compile for large matrices on later Julia versions.

Concretely, running the below snippet in a fresh session to get (compilation) timings for exp of an N×N SMatrix:

N = 10; SA = @SMatrix rand(N,N); @time exp(SA)

I get:

Time (N=3) Time (N=10) Time (N=15) Time (N = 20)
Julia v1.0 1.4 s 19 s 65 s 6 min
Julia v1.4 1.2 s 23 s 87 s
Julia v1.6 1.2 s 25 s 11 min
Julia v1.7 1.2 s 45 s 47 min

With † indicating that I did not try to get the numbers.

Coincidentally, I think this is a another reason to drop <v1.6: benchmarking on v1.0 has effectively hidden this issue for the Julia versions that most users will care about. It could even be an argument to benchmark on whatever is the most recent release of Julia.


It is probably a bad idea to be benchmarking exp for such large matrices (e.g., the README says "... [a] rough rule of thumb is that you should consider using a normal Array for arrays larger than 100 elements."). On the other hand, it's definitely concerning that the compilation time blows up so much on more recent versions.

I suggest we change change (1, 2, 3, 4, 10, 20) to (1, 2, 3, 4, 10) and 1:20 to 1:10 for these lines of the benchmarks (EDIT: I went ahead and did this in 5c17afc):

const matrix_sizes = if haskey(ENV, "GITHUB_EVENT_PATH")
(1, 2, 3, 4, 10, 20)
else
1:20
end


Btw., I previously wrote:

CI got stuck on the benchmarks which ran forever - is that something to be worried about?

That does seem a bit problematic. Does it run fine for you locally?

Tried just now: include("benchmarks.jl") works fine locally (~5-10 min on my laptop - thought it would've been more?).

But that's nonsense: doing include("benchmark.jl") doesn't actually run the benchmarks afaict, it just sets up the benchmark suite... That's why things looked fine locally.

@thchr
Copy link
Collaborator Author

thchr commented Feb 18, 2022

On a technical level, I think this is ready now (e.g. the benchmarks should run in finite time again).

The remaining question is whether there's consensus around the decision to drop support for pre-LTS versions?

@mateuszbaran
Copy link
Collaborator

The remaining question is whether there's consensus around the decision to drop support for pre-LTS versions?

I think there is as much consensus as there can be for such change. Ultimately the only way to figure out whether this is acceptable is tagging a release that drops support for pre-LTS versions of Julia and seeing who complains 🙂 . We can always undo this change.

@KristofferC
Copy link
Contributor

It could even be an argument to benchmark on whatever is the most recent release of Julia.

I think that makes sense

@fredrikekre
Copy link
Member

CI / Julia nightly - macOS-latest - x64 (pull_request) failed with a compiler error, but shouldn't be related to this PR. Is this issue known or seen before?

Stacktrace:
Internal error: encountered unexpected error in runtime:
TypeError(func=:TypeVar, context="upper bound", expected=Type, got=2)
ijl_type_error_rt at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
ijl_new_typevar at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
subtype_unionall at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
subtype_unionall at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
forall_exists_subtype at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
ijl_subtype_env at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
jl_type_intersection_env_s at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
ml_matches at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
ijl_matching_methods at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
_methods_by_ftype at ./reflection.jl:930 [inlined]
#findall#256 at ./compiler/methodtable.jl:68 [inlined]
findall##kw at ./compiler/methodtable.jl:65 [inlined]
#259 at ./compiler/methodtable.jl:97
get! at ./iddict.jl:178 [inlined]
#findall#258 at ./compiler/methodtable.jl:96 [inlined]
findall##kw at ./compiler/methodtable.jl:95 [inlined]
find_matching_methods at ./compiler/abstractinterpretation.jl:281
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:50
abstract_call_known at ./compiler/abstractinterpretation.jl:1609
abstract_call at ./compiler/abstractinterpretation.jl:1665
abstract_call at ./compiler/abstractinterpretation.jl:1644
abstract_eval_statement at ./compiler/abstractinterpretation.jl:1786
typeinf_local at ./compiler/abstractinterpretation.jl:2251
typeinf_nocycle at ./compiler/abstractinterpretation.jl:2347
_typeinf at ./compiler/typeinfer.jl:226
typeinf at ./compiler/typeinfer.jl:209
typeinf_edge at ./compiler/typeinfer.jl:856
abstract_call_method at ./compiler/abstractinterpretation.jl:588
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:127
abstract_call_known at ./compiler/abstractinterpretation.jl:1609
abstract_call at ./compiler/abstractinterpretation.jl:1665
abstract_call at ./compiler/abstractinterpretation.jl:1644
abstract_eval_statement at ./compiler/abstractinterpretation.jl:1786
typeinf_local at ./compiler/abstractinterpretation.jl:2251
typeinf_nocycle at ./compiler/abstractinterpretation.jl:2347
_typeinf at ./compiler/typeinfer.jl:226
typeinf at ./compiler/typeinfer.jl:209
typeinf_edge at ./compiler/typeinfer.jl:856
abstract_call_method at ./compiler/abstractinterpretation.jl:588
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:122
abstract_call_known at ./compiler/abstractinterpretation.jl:1609
abstract_call at ./compiler/abstractinterpretation.jl:1665
abstract_call at ./compiler/abstractinterpretation.jl:1644
abstract_eval_statement at ./compiler/abstractinterpretation.jl:1786
typeinf_local at ./compiler/abstractinterpretation.jl:2251
typeinf_nocycle at ./compiler/abstractinterpretation.jl:2347
_typeinf at ./compiler/typeinfer.jl:226
typeinf at ./compiler/typeinfer.jl:209
typeinf_edge at ./compiler/typeinfer.jl:856
abstract_call_method at ./compiler/abstractinterpretation.jl:588
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:127
abstract_call_known at ./compiler/abstractinterpretation.jl:1609
abstract_call at ./compiler/abstractinterpretation.jl:1665
abstract_call at ./compiler/abstractinterpretation.jl:1644
abstract_eval_statement at ./compiler/abstractinterpretation.jl:1786
typeinf_local at ./compiler/abstractinterpretation.jl:2251
typeinf_nocycle at ./compiler/abstractinterpretation.jl:2347
_typeinf at ./compiler/typeinfer.jl:226
typeinf at ./compiler/typeinfer.jl:209
typeinf_ext at ./compiler/typeinfer.jl:937
typeinf_ext_toplevel at ./compiler/typeinfer.jl:970
typeinf_ext_toplevel at ./compiler/typeinfer.jl:966
jfptr_typeinf_ext_toplevel_17651.clone_1 at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/sys.dylib (unknown line)
ijl_apply_generic at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
jl_type_infer at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
jl_generate_fptr_impl at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-codegen.1.9.dylib (unknown line)
jl_compile_method_internal at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
ijl_apply_generic at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
do_apply at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
ijl_apply_generic at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
do_call at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
eval_body at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
eval_body at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
eval_body at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
eval_body at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
jl_interpret_toplevel_thunk at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
macro expansion at /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.9/Test/src/Test.jl:464 [inlined]
macro expansion at /Users/runner/work/StaticArrays.jl/StaticArrays.jl/test/convert.jl:11 [inlined]
macro expansion at /Users/julia/buildbot/worker/package_macos64/build/usr/share/julia/stdlib/v1.9/Test/src/Test.jl:1357 [inlined]
top-level scope at /Users/runner/work/StaticArrays.jl/StaticArrays.jl/test/convert.jl:11
jl_toplevel_eval_flex at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
jl_toplevel_eval_flex at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
ijl_toplevel_eval_in at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
eval at ./boot.jl:368 [inlined]
include_string at ./loading.jl:1277
ijl_apply_generic at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
_include at ./loading.jl:1334
include at ./client.jl:476 [inlined]
addtests at /Users/runner/work/StaticArrays.jl/StaticArrays.jl/test/runtests.jl:20
unknown function (ip: 0x1248d15b2)
ijl_apply_generic at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
do_call at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
eval_body at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
jl_interpret_toplevel_thunk at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
top-level scope at /Users/runner/work/StaticArrays.jl/StaticArrays.jl/test/runtests.jl:40
jl_toplevel_eval_flex at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
jl_toplevel_eval_flex at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
ijl_toplevel_eval_in at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
eval at ./boot.jl:368 [inlined]
include_string at ./loading.jl:1277
ijl_apply_generic at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
_include at ./loading.jl:1334
include at ./client.jl:476
unknown function (ip: 0x1248b7572)
ijl_apply_generic at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
do_call at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
eval_body at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
jl_interpret_toplevel_thunk at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
top-level scope at none:6
jl_toplevel_eval_flex at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
jl_toplevel_eval_flex at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
ijl_toplevel_eval_in at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
eval at ./boot.jl:368 [inlined]
exec_options at ./client.jl:276
_start at ./client.jl:522
jfptr__start_27535.clone_1 at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/sys.dylib (unknown line)
ijl_apply_generic at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
true_main at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
jl_repl_entrypoint at /Users/runner/hostedtoolcache/julia/nightly/x64/lib/julia/libjulia-internal.1.9.dylib (unknown line)
Constructors of zero size arrays: Error During Test at /Users/runner/work/StaticArrays.jl/StaticArrays.jl/test/testutil.jl:26
  Test threw exception
  Expression: #= /Users/runner/work/StaticArrays.jl/StaticArrays.jl/test/testutil.jl:25 =# @inferred(SVector{0}(Int8[])) === SVector{0, Int8}()
  TypeError: in TypeVar, in upper bound, expected Type, got a value of type Int64
  Stacktrace:
    [1] _methods_by_ftype
      @ ./reflection.jl:930 [inlined]
    [2] #findall#256
      @ ./compiler/methodtable.jl:68 [inlined]
    [3] (::Core.Compiler.var"#259#260"{Int64, Core.Compiler.CachedMethodTable{Core.Compiler.InternalMethodTable}, Core.Box})()
      @ Core.Compiler ./compiler/methodtable.jl:97
    [4] get!
      @ ./iddict.jl:178 [inlined]
    [5] #findall#258
      @ ./compiler/methodtable.jl:96 [inlined]
    [6] find_matching_methods(argtypes::Vector{Any}, atype::Any, method_table::Core.Compiler.CachedMethodTable{Core.Compiler.InternalMethodTable}, union_split::Int64, max_methods::Int64)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:281
    [7] abstract_call_gf_by_type(interp::Core.Compiler.NativeInterpreter, f::Any, arginfo::Core.Compiler.ArgInfo, atype::Any, sv::Core.Compiler.InferenceState, max_methods::Int64)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:50
    [8] abstract_call_known(interp::Core.Compiler.NativeInterpreter, f::Any, arginfo::Core.Compiler.ArgInfo, sv::Core.Compiler.InferenceState, max_methods::Int64)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:1609
    [9] abstract_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler.ArgInfo, sv::Core.Compiler.InferenceState, max_methods::Int64)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:1665
   [10] abstract_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler.ArgInfo, sv::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:1644
   [11] abstract_eval_statement(interp::Core.Compiler.NativeInterpreter, e::Any, vtypes::Vector{Core.Compiler.VarState}, sv::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:1786
   [12] typeinf_local(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:2251
   [13] typeinf_nocycle(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:2347
   [14] _typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/typeinfer.jl:226
   [15] typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/typeinfer.jl:209
   [16] typeinf_edge(interp::Core.Compiler.NativeInterpreter, method::Method, atype::Any, sparams::Core.SimpleVector, caller::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/typeinfer.jl:856
   [17] abstract_call_method(interp::Core.Compiler.NativeInterpreter, method::Method, sig::Any, sparams::Core.SimpleVector, hardlimit::Bool, sv::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:588
   [18] abstract_call_gf_by_type(interp::Core.Compiler.NativeInterpreter, f::Any, arginfo::Core.Compiler.ArgInfo, atype::Any, sv::Core.Compiler.InferenceState, max_methods::Int64)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:127
   [19] abstract_call_known(interp::Core.Compiler.NativeInterpreter, f::Any, arginfo::Core.Compiler.ArgInfo, sv::Core.Compiler.InferenceState, max_methods::Int64)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:1609
   [20] abstract_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler.ArgInfo, sv::Core.Compiler.InferenceState, max_methods::Int64)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:1665
   [21] abstract_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler.ArgInfo, sv::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:1644
   [22] abstract_eval_statement(interp::Core.Compiler.NativeInterpreter, e::Any, vtypes::Vector{Core.Compiler.VarState}, sv::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:1786
   [23] typeinf_local(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:2251
   [24] typeinf_nocycle(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:2347
   [25] _typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/typeinfer.jl:226
   [26] typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/typeinfer.jl:209
   [27] typeinf_edge(interp::Core.Compiler.NativeInterpreter, method::Method, atype::Any, sparams::Core.SimpleVector, caller::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/typeinfer.jl:856
   [28] abstract_call_method(interp::Core.Compiler.NativeInterpreter, method::Method, sig::Any, sparams::Core.SimpleVector, hardlimit::Bool, sv::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:588
   [29] abstract_call_gf_by_type(interp::Core.Compiler.NativeInterpreter, f::Any, arginfo::Core.Compiler.ArgInfo, atype::Any, sv::Core.Compiler.InferenceState, max_methods::Int64)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:122
   [30] abstract_call_known(interp::Core.Compiler.NativeInterpreter, f::Any, arginfo::Core.Compiler.ArgInfo, sv::Core.Compiler.InferenceState, max_methods::Int64)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:1609
   [31] abstract_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler.ArgInfo, sv::Core.Compiler.InferenceState, max_methods::Int64)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:1665
   [32] abstract_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler.ArgInfo, sv::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:1644
   [33] abstract_eval_statement(interp::Core.Compiler.NativeInterpreter, e::Any, vtypes::Vector{Core.Compiler.VarState}, sv::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:1786
   [34] typeinf_local(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:2251
   [35] typeinf_nocycle(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:2347
   [36] _typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/typeinfer.jl:226
   [37] typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/typeinfer.jl:209
   [38] typeinf_edge(interp::Core.Compiler.NativeInterpreter, method::Method, atype::Any, sparams::Core.SimpleVector, caller::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/typeinfer.jl:856
   [39] abstract_call_method(interp::Core.Compiler.NativeInterpreter, method::Method, sig::Any, sparams::Core.SimpleVector, hardlimit::Bool, sv::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:588
   [40] abstract_call_gf_by_type(interp::Core.Compiler.NativeInterpreter, f::Any, arginfo::Core.Compiler.ArgInfo, atype::Any, sv::Core.Compiler.InferenceState, max_methods::Int64)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:127
   [41] abstract_call_known(interp::Core.Compiler.NativeInterpreter, f::Any, arginfo::Core.Compiler.ArgInfo, sv::Core.Compiler.InferenceState, max_methods::Int64)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:1609
   [42] abstract_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler.ArgInfo, sv::Core.Compiler.InferenceState, max_methods::Int64)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:1665
   [43] abstract_call(interp::Core.Compiler.NativeInterpreter, arginfo::Core.Compiler.ArgInfo, sv::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:1644
   [44] abstract_eval_statement(interp::Core.Compiler.NativeInterpreter, e::Any, vtypes::Vector{Core.Compiler.VarState}, sv::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:1786
   [45] typeinf_local(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:2251
   [46] typeinf_nocycle(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/abstractinterpretation.jl:2347
   [47] _typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/typeinfer.jl:226
   [48] typeinf(interp::Core.Compiler.NativeInterpreter, frame::Core.Compiler.InferenceState)
      @ Core.Compiler ./compiler/typeinfer.jl:209
   [49] typeinf
      @ ./compiler/typeinfer.jl:8 [inlined]
   [50] typeinf_type(interp::Core.Compiler.NativeInterpreter, method::Method, atype::Any, sparams::Core.SimpleVector)
      @ Core.Compiler ./compiler/typeinfer.jl:959
   [51] return_types(f::Any, types::Any, interp::Core.Compiler.NativeInterpreter)
      @ Base ./reflection.jl:1287
   [52] return_types(f::Any, types::Any)
      @ Base ./reflection.jl:1280
   [53] macro expansion
      @ ~/hostedtoolcache/julia/nightly/x64/share/julia/stdlib/v1.9/Test/src/Test.jl:464 [inlined]
   [54] macro expansion
      @ ~/work/StaticArrays.jl/StaticArrays.jl/test/convert.jl:11 [inlined]
   [55] macro expansion
      @ ~/hostedtoolcache/julia/nightly/x64/share/julia/stdlib/v1.9/Test/src/Test.jl:1357 [inlined]

@fredrikekre fredrikekre merged commit f36bd64 into JuliaArrays:master Feb 21, 2022
@mateuszbaran
Copy link
Collaborator

CI / Julia nightly - macOS-latest - x64 (pull_request) failed with a compiler error, but shouldn't be related to this PR. Is this issue known or seen before?

I haven't seen that. Some recent compiler changes might have caused that and it may be worth reporting.

@andyferris
Copy link
Member

The remaining question is whether there's consensus around the decision to drop support for pre-LTS versions?

Personally, I'm happy with this decision - this package always evolves with the compiler and standard library. If people have code using Julia 1.0-1.5 they probably don't want StaticArrays APIs to be evolving either!

@fredrikekre
Copy link
Member

I haven't seen that. Some recent compiler changes might have caused that and it may be worth reporting.

Same error happend on Linux on master now.

@c42f
Copy link
Member

c42f commented Feb 22, 2022

Thanks @thchr for debugging and pushing through with this!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants