Skip to content

Commit 4f5ac59

Browse files
committed
Make sure strides(::StridedReinterpretArray) calls size_to_strides
It turns out `strides(a::StridedReinterpretArray)` won't call `Base.size_to_strides` anymore after #44027. As it is dispatched to `strides(::NonReshapedReinterpretArray)`/`strides(::ReshapedReinterpretArray)`. This commit fix that regression.
1 parent bc25d6a commit 4f5ac59

File tree

1 file changed

+8
-16
lines changed

1 file changed

+8
-16
lines changed

base/reinterpretarray.jl

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -152,23 +152,15 @@ strides(a::Union{DenseArray,StridedReshapedArray,StridedReinterpretArray}) = siz
152152
stride(A::Union{DenseArray,StridedReshapedArray,StridedReinterpretArray}, k::Integer) =
153153
k ndims(A) ? strides(A)[k] : length(A)
154154

155-
function strides(a::ReshapedReinterpretArray)
156-
ap = parent(a)
157-
els, elp = elsize(a), elsize(ap)
158-
stp = strides(ap)
159-
els == elp && return stp
160-
els < elp && return (1, _checked_strides(stp, els, elp)...)
155+
function strides(a::ReinterpretArray{T,<:Any,S,<:AbstractArray{S},IsReshaped}) where {T,S,IsReshaped}
156+
_checkcontiguous(Bool, a) && return size_to_strides(1, size(a))
157+
stp = strides(parent(a))
158+
els, elp = sizeof(T), sizeof(S)
159+
els == elp && return stp # 0dim parent is also handled here.
160+
IsReshaped && els < elp && return (1, _checked_strides(stp, els, elp)...)
161161
stp[1] == 1 || throw(ArgumentError("Parent must be contiguous in the 1st dimension!"))
162-
return _checked_strides(tail(stp), els, elp)
163-
end
164-
165-
function strides(a::NonReshapedReinterpretArray)
166-
ap = parent(a)
167-
els, elp = elsize(a), elsize(ap)
168-
stp = strides(ap)
169-
els == elp && return stp
170-
stp[1] == 1 || throw(ArgumentError("Parent must be contiguous in the 1st dimension!"))
171-
return (1, _checked_strides(tail(stp), els, elp)...)
162+
st′ = _checked_strides(tail(stp), els, elp)
163+
return IsReshaped ? st′ : (1, st′...)
172164
end
173165

174166
@inline function _checked_strides(stp::Tuple, els::Integer, elp::Integer)

0 commit comments

Comments
 (0)