diff --git a/src/generic.jl b/src/generic.jl index 70bbf8f6..b1ec10db 100644 --- a/src/generic.jl +++ b/src/generic.jl @@ -1034,6 +1034,8 @@ dot(x, A, y) = dot(x, A*y) # generic fallback for cases that are not covered by function dot(x::AbstractVector, A::AbstractMatrix, y::AbstractVector) (axes(x)..., axes(y)...) == axes(A) || throw(DimensionMismatch()) + # outermost zero call to avoid spurious sign ambiguity (like 0.0 - 0.0im) + any(isempty, (x, y)) && return zero(dot(zero(eltype(x)), zero(eltype(A)), zero(eltype(y)))) T = typeof(dot(first(x), first(A), first(y))) s = zero(T) i₁ = first(eachindex(x)) diff --git a/test/generic.jl b/test/generic.jl index 5de19446..986bb552 100644 --- a/test/generic.jl +++ b/test/generic.jl @@ -784,6 +784,10 @@ end @test dot(x, B', y) ā‰ˆ dot(B*x, y) elty <: Real && @test dot(x, transpose(B), y) ā‰ˆ dot(x, transpose(B)*y) end + for (m, n) in ((0, 0), (1, 0), (0, 1)) + v = zeros(ComplexF64, m); a = zeros(ComplexF64, m, n); w = zeros(Float64, n) + @test dot(v, a, w) === zero(ComplexF64) + end end @testset "condskeel #34512" begin