diff --git a/src/diagonal.jl b/src/diagonal.jl index ddee8981..94e7cacd 100644 --- a/src/diagonal.jl +++ b/src/diagonal.jl @@ -349,6 +349,8 @@ end function rmul!(A::AbstractMatrix, D::Diagonal) matmul_size_check(size(A), size(D)) + axes(A, 2) == axes(D.diag, 1) || + throw(ArgumentError(lazy"second axis of A, $(axes(A,2)), does not match first axis of D, $(axes(D, 1))")) for I in CartesianIndices(A) row, col = Tuple(I) @inbounds A[row, col] *= D.diag[col] @@ -370,6 +372,8 @@ end function lmul!(D::Diagonal, B::AbstractVecOrMat) matmul_size_check(size(D), size(B)) + axes(D.diag, 1) == axes(B, 1) || + throw(ArgumentError(lazy"second axis of D, $(axes(D, 2)), does not match first axis of B, $(axes(B, 1))")) for I in CartesianIndices(B) row = I[1] @inbounds B[I] = D.diag[row] * B[I] diff --git a/test/diagonal.jl b/test/diagonal.jl index f83ad392..ee78bad5 100644 --- a/test/diagonal.jl +++ b/test/diagonal.jl @@ -955,7 +955,9 @@ end D = Diagonal(1:4) A = OffsetArray(rand(4,4), 2, 2) @test_throws ArgumentError D * A + @test_throws ArgumentError lmul!(D, A) @test_throws ArgumentError A * D + @test_throws ArgumentError rmul!(A, D) @test_throws ArgumentError mul!(similar(A, size(A)), A, D) @test_throws ArgumentError mul!(similar(A, size(A)), D, A) end