Skip to content

Commit bb7b60b

Browse files
committed
Fix copy for partly initialized unit triangular
1 parent 3393398 commit bb7b60b

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

src/triangular.jl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -623,7 +623,8 @@ end
623623
copytrito!(dest, U, U isa UpperOrUnitUpperTriangular ? 'L' : 'U')
624624
return dest
625625
end
626-
@propagate_inbounds function _copy!(dest::StridedMatrix, U::UpperOrLowerTriangular{<:Any, <:StridedMatrix})
626+
@propagate_inbounds function _copy!(dest::StridedMatrix,
627+
U::Union{UnitUpperOrUnitLowerTriangular, UpperOrLowerTriangularStrided})
627628
U2 = Base.unalias(dest, U)
628629
copy_unaliased!(dest, U2)
629630
return dest
@@ -656,7 +657,7 @@ end
656657
end
657658
dest
658659
end
659-
@inline function copy_unaliased!(dest::StridedMatrix, U::UpperOrUnitUpperTriangular{<:Any, <:StridedMatrix})
660+
@inline function copy_unaliased!(dest::StridedMatrix, U::UpperOrUnitUpperTriangular)
660661
@boundscheck checkbounds(dest, axes(U)...)
661662
for col in axes(dest,2)
662663
@inbounds copy_unaliased_stored!(dest, U, col)
@@ -666,7 +667,7 @@ end
666667
end
667668
return dest
668669
end
669-
@inline function copy_unaliased!(dest::StridedMatrix, L::LowerOrUnitLowerTriangular{<:Any, <:StridedMatrix})
670+
@inline function copy_unaliased!(dest::StridedMatrix, L::LowerOrUnitLowerTriangular)
670671
@boundscheck checkbounds(dest, axes(L)...)
671672
for col in axes(dest,2)
672673
for row in firstindex(dest,1):col-1

test/triangular.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,16 @@ end
650650
@test_throws "cannot set index in the upper triangular part" copyto!(A, B)
651651
end
652652
end
653+
654+
@testset "partly initialized unit triangular" begin
655+
for T in (UnitUpperTriangular, UnitLowerTriangular)
656+
isupper = T == UnitUpperTriangular
657+
M = Matrix{BigFloat}(undef, 2, 2)
658+
M[1+isupper,1+!isupper] = 3
659+
U = T(M')
660+
@test copyto!(similar(M), U) == U
661+
end
662+
end
653663
end
654664

655665
@testset "getindex with Integers" begin

0 commit comments

Comments
 (0)