On Sun, Jun 26, 2016 at 9:38 PM, Darwin Darakananda <[email protected]> wrote: > That example seems to work on the version I'm using (commit c20199e). Could > they be separate issues?
Unlikely > > On Sunday, June 26, 2016 at 5:47:36 PM UTC-7, Yichao Yu wrote: >> >> On Sun, Jun 26, 2016 at 8:15 PM, Darwin Darakananda >> <[email protected]> wrote: >> > Hi All, >> > >> >> Note that this is not related to generated function but the function >> signature (the segfault is in `jl_method_def`) >> >> Simpler repro >> >> ``` >> function update!(::Tuple) >> end >> >> function update!{N}(::Vararg{Tuple,N}) >> end >> ``` >> >> Please open an issue on github. Thanks. >> >> >> > I'm running into a problem where Julia is segfaulting when creating a >> > generated method for an existing function. >> > This is the first time I'm using generated functions, so I'm not sure if >> > I'm >> > using it correctly. >> > >> > function update!(x::Vector{Int}, Δxs::Vector{Int}...) >> > for i in eachindex(x), Δx in Δxs >> > x[i] += Δx[i] >> > end >> > end >> > >> > >> > function update!(x::Vector{Float64}, Δxs::Vector{Float64}...) >> > for i in eachindex(x), Δx in Δxs >> > x[i] += 2.0*Δx[i] >> > end >> > end >> > >> > >> > function update!(sys::Tuple, Δsys::Tuple) >> > for (s, Δs) in zip(sys, Δsys) >> > update!(s, Δs) >> > end >> > end >> > >> > # x = rand(Int, 100); Δx₁ = similar(x), Δx₁ = similar(x) >> > # y = rand(100); Δy₁ = similar(y), Δy₁ = similar(y) >> > >> > # update!(x, Δx₁, Δx₂) >> > # update!(y, Δy₁, Δy₂) >> > # update!((x,y), (Δx₁, Δy₁)) >> > >> > # Want something to handle update!((x,y), (Δx₁, Δy₁), (Δx₂, Δy₂)) >> > >> > @generated function update!{N}(sys::Tuple, Δsys::Vararg{Tuple, N}) >> > # (Δs1, Δs2, ..., ΔsN) >> > el = [Symbol("Δs" * string(i)) for i in 1:N] >> > # zip(Δsys[1], Δsys[2], ..., Δsys[N]) >> > src = Expr(:call, :zip, :sys, [Expr(:ref, :Δsys, i) for i in >> > 1:N]...) >> > >> > quote >> > for $(Expr(:tuple, :s, el...)) in $src >> > # update!(s, Δs1, Δs2, ..., ΔsN) >> > $(Expr(:call, :update!, :s, el...)) >> > end >> > nothing >> > end >> > end >> > >> > signal (11): Segmentation fault >> > while loading no file, in expression starting on line 0 >> > inst_tuple_w_ at /home/darwin/.local/julia/src/jltypes.c:2352 >> > inst_type_w_ at /home/darwin/.local/julia/src/jltypes.c:2437 >> > inst_tuple_w_ at /home/darwin/.local/julia/src/jltypes.c:2383 >> > inst_type_w_ at /home/darwin/.local/julia/src/jltypes.c:2437 >> > jl_instantiate_type_with at /home/darwin/.local/julia/src/jltypes.c:2480 >> > jl_args_morespecific at /home/darwin/.local/julia/src/jltypes.c:3096 >> > jl_typemap_list_insert_sorted at >> > /home/darwin/.local/julia/src/typemap.c:1033 >> > jl_typemap_insert_generic at /home/darwin/.local/julia/src/typemap.c:886 >> > jl_typemap_insert at /home/darwin/.local/julia/src/typemap.c:1006 >> > jl_method_table_insert at /home/darwin/.local/julia/src/gf.c:1069 >> > >> > ⋮ >> > >> > >> > It works fine if I change the name of the generated function to >> > something >> > else. Is this the expected behavior? >> > >> > Thanks, >> > >> > Darwin
