That example seems to work on the version I'm using (commit c20199e). 
 Could they be separate issues?

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 
> <darwi...@gmail.com <javascript:>> 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 
>

Reply via email to