diff --git a/stdlib/LinearAlgebra/src/lapack.jl b/stdlib/LinearAlgebra/src/lapack.jl index 51dd73f517a31..a85978435bf46 100644 --- a/stdlib/LinearAlgebra/src/lapack.jl +++ b/stdlib/LinearAlgebra/src/lapack.jl @@ -31,16 +31,18 @@ function chkargsok(ret::BlasInt) end "Handle all nonzero info codes" -function chklapackerror(ret::BlasInt) +function chklapackerror(ret::BlasInt, f...) if ret == 0 return elseif ret < 0 throw(ArgumentError("invalid argument #$(-ret) to LAPACK call")) else # ret > 0 - throw(LAPACKException(ret)) + chklapackerror_positive(ret, f...) end end +chklapackerror_positive(ret, f...) = throw(LAPACKException(ret)) + function chknonsingular(ret::BlasInt) if ret > 0 throw(SingularException(ret)) @@ -3571,11 +3573,12 @@ for (trtri, trtrs, elty) in uplo, trans, diag, n, size(B,2), A, max(1,stride(A,2)), B, max(1,stride(B,2)), info, 1, 1, 1) - chklapackerror(info[]) + chklapackerror(info[], trtrs!) B end end end +chklapackerror_positive(ret, ::typeof(trtrs!)) = chknonsingular(ret) """ trtri!(uplo, diag, A) diff --git a/stdlib/LinearAlgebra/test/triangular.jl b/stdlib/LinearAlgebra/test/triangular.jl index 7de1d10fe6d6c..43cafaaa74c9e 100644 --- a/stdlib/LinearAlgebra/test/triangular.jl +++ b/stdlib/LinearAlgebra/test/triangular.jl @@ -510,11 +510,7 @@ for elty1 in (Float32, Float64, BigFloat, ComplexF32, ComplexF64, Complex{BigFlo @test_throws DimensionMismatch Ann'\bm @test_throws DimensionMismatch transpose(Ann)\bm if t1 == UpperTriangular || t1 == LowerTriangular - if elty1 === eltyB <: BlasFloat - @test_throws LAPACKException ldiv!(t1(zeros(elty1, n, n)), fill(eltyB(1), n)) - else - @test_throws SingularException ldiv!(t1(zeros(elty1, n, n)), fill(eltyB(1), n)) - end + @test_throws SingularException ldiv!(t1(zeros(elty1, n, n)), fill(eltyB(1), n)) end @test B/A1 ≈ B/Matrix(A1) @test B/transpose(A1) ≈ B/transpose(Matrix(A1))