Skip to content

Commit 31eb6c2

Browse files
authored
Avoid StepRangeLen eltype widening (#38979)
1 parent d46198d commit 31eb6c2

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

base/range.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -364,7 +364,7 @@ struct StepRangeLen{T,R,S} <: AbstractRange{T}
364364
end
365365

366366
StepRangeLen(ref::R, step::S, len::Integer, offset::Integer = 1) where {R,S} =
367-
StepRangeLen{typeof(ref+0*step),R,S}(ref, step, len, offset)
367+
StepRangeLen{typeof(ref+zero(step)),R,S}(ref, step, len, offset)
368368
StepRangeLen{T}(ref::R, step::S, len::Integer, offset::Integer = 1) where {T,R,S} =
369369
StepRangeLen{T,R,S}(ref, step, len, offset)
370370

test/ranges.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1721,4 +1721,12 @@ end
17211721
@test isempty(range(typemin(Int), step=-1//1, length=0))
17221722
@test eltype(range(typemin(Int), step=-1//1, length=0)) === Rational{Int}
17231723
@test typeof(step(range(typemin(Int), step=-1//1, length=0))) === Rational{Int}
1724+
1725+
@test StepRangeLen(Int8(1), Int8(2), 3) == Int8[1, 3, 5]
1726+
@test eltype(StepRangeLen(Int8(1), Int8(2), 3)) === Int8
1727+
@test typeof(step(StepRangeLen(Int8(1), Int8(2), 3))) === Int8
1728+
1729+
@test StepRangeLen(Int8(1), Int8(2), 3, 2) == Int8[-1, 1, 3]
1730+
@test eltype(StepRangeLen(Int8(1), Int8(2), 3, 2)) === Int8
1731+
@test typeof(step(StepRangeLen(Int8(1), Int8(2), 3, 2))) === Int8
17241732
end

0 commit comments

Comments
 (0)