From eb96c0763a7a224a9598b27054910356cf6dc60e Mon Sep 17 00:00:00 2001 From: Lilith Orion Hafner Date: Sun, 7 Apr 2024 22:46:14 -0500 Subject: [PATCH] Test and fix non-int-length bug in `view(::Memory, ::Union{UnitRange, Base.OneTo})` (#53991) We assumed, falsely, that `length(inds) isa Int`. The length must be convertible to an `Int` or we throw, but that conversion may need to be explicitly performed. Fixes #53990 CC @oscardssmith @vtjnash @odow (cherry picked from commit e4f2124e08a14fdfa2c0e569ceb4412b2f666868) --- base/genericmemory.jl | 2 +- test/arrayops.jl | 3 +++ test/core.jl | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/base/genericmemory.jl b/base/genericmemory.jl index a6f002b9c6175..3463be456ea59 100644 --- a/base/genericmemory.jl +++ b/base/genericmemory.jl @@ -308,7 +308,7 @@ end isempty(inds) && return T[] # needed to allow view(Memory{T}(undef, 0), 2:1) @boundscheck checkbounds(m, inds) ref = MemoryRef(m, first(inds)) # @inbounds would be safe here but does not help performance. - dims = (length(inds),) + dims = (Int(length(inds)),) $(Expr(:new, :(Array{T, 1}), :ref, :dims)) end end diff --git a/test/arrayops.jl b/test/arrayops.jl index 65a9ecbd5e2a2..a31d373a65a38 100644 --- a/test/arrayops.jl +++ b/test/arrayops.jl @@ -3205,6 +3205,9 @@ end @test @inferred(view(mem, -5:-7))::Vector{Int} == [] @test @inferred(reshape(mem, 5, 2))::Matrix{Int} == reshape(11:20, 5, 2) + # 53990 + @test @inferred(view(mem, unsigned(1):10))::Vector{Int} == 11:20 + empty_mem = Memory{Module}(undef, 0) @test_throws BoundsError view(empty_mem, 0:1) @test_throws BoundsError view(empty_mem, 1:2) diff --git a/test/core.jl b/test/core.jl index 0eca2251cd146..b1af565c07d6a 100644 --- a/test/core.jl +++ b/test/core.jl @@ -5524,6 +5524,9 @@ let a = Base.StringVector(2^17) @test sizeof(c) == 0 end +# issue #53990 / https://github.com/JuliaLang/julia/pull/53896#discussion_r1555087951 +@test Base.StringVector(UInt64(2)) isa Vector{UInt8} + @test_throws ArgumentError eltype(Bottom) # issue #16424, re-evaluating type definitions