diff --git a/src/diagonal.jl b/src/diagonal.jl index e60fb009..11b7b784 100644 --- a/src/diagonal.jl +++ b/src/diagonal.jl @@ -358,6 +358,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] @@ -406,6 +408,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 712f426c..ef438037 100644 --- a/test/diagonal.jl +++ b/test/diagonal.jl @@ -988,7 +988,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