diff --git a/stdlib/LinearAlgebra/src/lu.jl b/stdlib/LinearAlgebra/src/lu.jl index 68c085a68b47a..48a167356e91e 100644 --- a/stdlib/LinearAlgebra/src/lu.jl +++ b/stdlib/LinearAlgebra/src/lu.jl @@ -496,7 +496,8 @@ factorize(A::Tridiagonal) = lu(A) function getproperty(F::LU{T,Tridiagonal{T,V}}, d::Symbol) where {T,V} m, n = size(F) if d == :L - L = Array(Bidiagonal(fill(one(T), n), getfield(getfield(F, :factors), :dl), d)) + dl = getfield(getfield(F, :factors), :dl) + L = Array(Bidiagonal(fill!(similar(dl, n), one(T)), dl, d)) for i = 2:n tmp = L[getfield(F, :ipiv)[i], 1:i - 1] L[getfield(F, :ipiv)[i], 1:i - 1] = L[i, 1:i - 1] diff --git a/stdlib/LinearAlgebra/test/tridiag.jl b/stdlib/LinearAlgebra/test/tridiag.jl index 88f28a02456d6..dcde93b03c1a1 100644 --- a/stdlib/LinearAlgebra/test/tridiag.jl +++ b/stdlib/LinearAlgebra/test/tridiag.jl @@ -384,4 +384,11 @@ end @test SymTridiagonal(ones(0), ones(0)) * ones(0, 2) == ones(0, 2) end +@testset "issue #29644" begin + F = lu(Tridiagonal(sparse(1.0I, 3, 3))) + @test F.L == Matrix(I, 3, 3) + @test startswith(sprint(show, MIME("text/plain"), F), + "LinearAlgebra.LU{Float64,LinearAlgebra.Tridiagonal{Float64,SparseArrays.SparseVector") +end + end # module TestTridiagonal