Thanks for the replies. I filed the issue here <https://github.com/JuliaLang/julia/issues/12304> (#12304)
On Friday, July 24, 2015 at 4:09:07 PM UTC+2, Stefan Karpinski wrote: > > Please do file an issue <https://github.com/JuliaLang/julia/issues> if > you haven't already. > > On Fri, Jul 24, 2015 at 5:09 AM, Mauro <maur...@runbox.com <javascript:>> > wrote: > >> > I recently poked around a bit with the @code_warntype macro in my code >> and >> > quickly realized that a lot of my variables were assigned "Any" at >> compile >> > time. I tried to find the reason for it and got down to the eig >> function: >> > >> > julia> @code_warntype eig(rand(Float64, 5,5)) >> > Variables: >> > A::Array{Float64,2} >> > args::Tuple{} >> > >> > Body: >> > begin $(Expr(:line, 66, symbol("linalg/eigen.jl"), symbol(""))) >> > GenSym(8) = (top(ccall))(:jl_alloc_array_1d,$(Expr(:call1, >> > :(top(apply_type)), :Array, Any, 1)),$(Expr(:call1, :(top(svec)), :Any, >> > :Int)),Array{Any,1},0,0,0)::Array{Any,1} >> > GenSym(9) = GenSym(8) >> > return __eig#179__(GenSym(9),A::Array{Float64,2})::Tuple{Any,Any} >> > end::Tuple{Any,Any} >> > >> > >> > Is there a reason this returns Tuple{Any, Any} instead of >> Tuple{Complex128, >> > Complex128} as you might expect? As far as I understand it this causes >> > everything touched by the eig function to become type unstable. >> >> The reason is the method getindex(A::Union{Eigen,GeneralizedEigen}, >> d::Symbol) near the top of base/linalg/eigen.jl which is not type >> stable. This is then used in eig. Have a look at it with >> >> @edit eig(rand(Float64, 5,5)) >> >> I suspect this is a bug, you should file a report. In the meantime you >> can monkey patch by adding this to your code: >> >> function Base.eig(A::Union{Number, AbstractMatrix}, args...; kwargs...) >> F = eigfact(A, args...; kwargs...) >> F.values, F.vectors >> end >> > >