diff --git a/base/range.jl b/base/range.jl index 9f5dd214d67bb..859f55aece01d 100644 --- a/base/range.jl +++ b/base/range.jl @@ -905,7 +905,10 @@ end ## indexing -isassigned(r::AbstractRange, i::Int) = firstindex(r) <= i <= lastindex(r) +function isassigned(r::AbstractRange, i::Integer) + i isa Bool && throw(ArgumentError("invalid index: $i of type Bool")) + firstindex(r) <= i <= lastindex(r) +end _in_unit_range(v::UnitRange, val, i::Integer) = i > 0 && val <= v.stop && val >= v.start diff --git a/test/ranges.jl b/test/ranges.jl index 0e195f5dde24e..27a74ac854e9f 100644 --- a/test/ranges.jl +++ b/test/ranges.jl @@ -2498,3 +2498,12 @@ end # a case that using mul_with_overflow & add_with_overflow might get wrong: @test (-10:2:typemax(Int))[typemax(Int)รท2+2] == typemax(Int)-9 end + +@testset "isassigned" begin + for (r, val) in ((1:3, 3), (1:big(2)^65, big(2)^65)) + @test isassigned(r, lastindex(r)) + # test that the indexing actually succeeds + @test r[end] == val + @test_throws ArgumentError isassigned(r, true) + end +end