Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The
Size()
constructor (used with no arguments) is currently type unstable, at least on Julia 1.10:This doesn't seem to be related to the
@pure
annotations in theSize
constructors.This PR fixes this issue by explicitly creating a
Size()
constructor which is type stable.For context, this seems to fix an obscure type stability issue I identified when broadcasting a
Number
and aSVector
, which only manifests when Julia is launched with--check-bounds=no
. This looks similar to JuliaArrays/StaticArrays.jl#1155, but I'm not sure it's exactly the same issue.As an example:
On Julia 1.10.4 started with default flags everything looks fine:
When Julia is launched with
--check-bounds=no
:The culprit can be tracked down to be the type unstable
Size()
constructor. Note thatSize()
is also unstable without--check-bounds=no
, but in that case Julia is somehow able to determine the correct return type of the broadcast.