@@ -177,8 +177,7 @@ function default_blasmul!(α, A::AbstractMatrix, B::AbstractMatrix, β, C::Abstr
177177
178178 rmul! (C, β)
179179
180- (iszero (mA) || iszero (nB)) && return C
181- iszero (nA) && return C
180+ (isempty (C) || iszero (nA)) && return C
182181
183182 r = rowsupport (B,rowsupport (A,first (colsupport (A))))
184183 jindsid = all (k -> rowsupport (B,rowsupport (A,k)) == r, colsupport (A))
@@ -203,7 +202,7 @@ function default_blasmul!(α, A::AbstractVector, B::AbstractMatrix, β, C::Abstr
203202
204203 rmul! (C, β)
205204
206- ( iszero (mA) || iszero (nB) ) && return C
205+ isempty (C ) && return C
207206
208207 for k in colsupport (A), j in rowsupport (B)
209208 _default_blasmul_loop! (α, A, B, β, C, k, j)
@@ -219,12 +218,15 @@ function _default_blasmul!(::IndexLinear, α, A::AbstractMatrix, B::AbstractVect
219218 length (C) == mA || throw (DimensionMismatch (" Dimensions must match" ))
220219
221220 rmul! (C, β)
222- (nA == 0 || mB == 0 ) && return C
221+ (isempty (C) || isempty (A)) && return C
222+
223+ Astride = size (A, 1 ) # use size, not stride, since its not pointer arithmetic
223224
224225 @inbounds for k in colsupport (B,1 )
226+ aoffs = (k- 1 )* Astride
225227 b = B[k] * α
226228 for i in colsupport (A,k)
227- C[i] += A[i,k ] * b
229+ C[i] += A[aoffs + i ] * b
228230 end
229231 end
230232
@@ -238,7 +240,7 @@ function _default_blasmul!(::IndexCartesian, α, A::AbstractMatrix, B::AbstractV
238240 length (C) == mA || throw (DimensionMismatch (" Dimensions must match" ))
239241
240242 rmul! (C, β)
241- (nA == 0 || mB == 0 ) && return C
243+ (isempty (C) || isempty (A) ) && return C
242244
243245 @inbounds for k in colsupport (B,1 )
244246 b = B[k] * α
0 commit comments