diff --git a/src/symmetric.jl b/src/symmetric.jl index 6c06dec1..85d8aa98 100644 --- a/src/symmetric.jl +++ b/src/symmetric.jl @@ -352,7 +352,7 @@ function copyto!(dest::Symmetric, src::Symmetric) elseif src.uplo == dest.uplo copytrito!(dest.data, src.data, src.uplo) else - transpose!(dest.data, Base.unalias(dest.data, src.data)) + copytrito!(dest.data, transpose(Base.unalias(dest.data, src.data)), dest.uplo) end return dest end @@ -363,7 +363,7 @@ function copyto!(dest::Hermitian, src::Hermitian) elseif src.uplo == dest.uplo copytrito!(dest.data, src.data, src.uplo) else - adjoint!(dest.data, Base.unalias(dest.data, src.data)) + copytrito!(dest.data, adjoint(Base.unalias(dest.data, src.data)), dest.uplo) end return dest end diff --git a/test/symmetric.jl b/test/symmetric.jl index 68f0ff47..f653f4b9 100644 --- a/test/symmetric.jl +++ b/test/symmetric.jl @@ -1163,4 +1163,19 @@ end end end +@testset "copyto! with mismatched uplo" begin + for (S,tf) in ((Symmetric, transpose), (Hermitian, adjoint)) + for (uplo1,uplo2) in [(:U,:L), (:L, :U)] + M = Matrix{Complex{BigFloat}}(undef, 2, 2) + M[1,1] = M[2,2] = 3 + isupper = uplo1 == :U + M[1+!isupper, 1+isupper] = 4+3im + H1 = S(M, uplo1) + H2 = 2 * S(tf(M), uplo2) + copyto!(H2, H1) + @test H2 == H1 + end + end +end + end # module TestSymmetric