JuliaHEP / AwkwardArray.jl

Awkward Array in Julia mirrors the Python library, enabling effortless zero-copy data exchange between Julia and Python
https://juliahep.github.io/AwkwardArray.jl/dev/
MIT License
31 stars 2 forks source link

Seg fault on nightly #66

Closed Moelf closed 7 months ago

Moelf commented 7 months ago
            AwkwardArray.from_iter(
                Vector{Union{Missing,Float64,Vector{Int64}}}([1.1, [1, 2], missing, [3]]),
            )

this is the minimal example that causes an unreachable reached:

julia> AwkwardArray.from_iter(
           Vector{Union{Missing,Float64,Vector{Int64}}}([1.1, [1, 2], missing, [3]]),
       )
Unreachable reached at 0x7355e22e5ad0

[166318] signal 4 (2): Illegal instruction
in expression starting at REPL[4]:1
layout_for at /home/akako/Documents/github/dotFiles/homedir/.julia/dev/AwkwardArray/src/all_implementations.jl:2330
from_iter at /home/akako/Documents/github/dotFiles/homedir/.julia/dev/AwkwardArray/src/all_implementations.jl:2354
unknown function (ip: 0x7355e22e5c62)
jl_apply at /cache/build/builder-amdci5-2/julialang/julia-master/src/julia.h:2166 [inlined]
do_call at /cache/build/builder-amdci5-2/julialang/julia-master/src/interpreter.c:126
eval_value at /cache/build/builder-amdci5-2/julialang/julia-master/src/interpreter.c:223
eval_stmt_value at /cache/build/builder-amdci5-2/julialang/julia-master/src/interpreter.c:174 [inlined]
eval_body at /cache/build/builder-amdci5-2/julialang/julia-master/src/interpreter.c:675
jl_interpret_toplevel_thunk at /cache/build/builder-amdci5-2/julialang/julia-master/src/interpreter.c:815
jl_toplevel_eval_flex at /cache/build/builder-amdci5-2/julialang/julia-master/src/toplevel.c:943
jl_toplevel_eval_flex at /cache/build/builder-amdci5-2/julialang/julia-master/src/toplevel.c:886
ijl_toplevel_eval_in at /cache/build/builder-amdci5-2/julialang/julia-master/src/toplevel.c:994
eval at ./boot.jl:428 [inlined]
eval_user_input at /cache/build/builder-amdci5-2/julialang/julia-master/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:224
repl_backend_loop at /cache/build/builder-amdci5-2/julialang/julia-master/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:320
#start_repl_backend#48 at /cache/build/builder-amdci5-2/julialang/julia-master/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:305
start_repl_backend at /cache/build/builder-amdci5-2/julialang/julia-master/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:302
#run_repl#61 at /cache/build/builder-amdci5-2/julialang/julia-master/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:461
run_repl at /cache/build/builder-amdci5-2/julialang/julia-master/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:447
jfptr_run_repl_12538 at /tmp/julia-2b939f7829/share/julia/compiled/v1.11/REPL/u0gqU_FV07k.so (unknown line)
#1122 at ./client.jl:440
jfptr_YY.1122_16793 at /tmp/julia-2b939f7829/share/julia/compiled/v1.11/REPL/u0gqU_FV07k.so (unknown line)
jl_apply at /cache/build/builder-amdci5-2/julialang/julia-master/src/julia.h:2166 [inlined]
jl_f__call_latest at /cache/build/builder-amdci5-2/julialang/julia-master/src/builtins.c:875
#invokelatest#2 at ./essentials.jl:1025 [inlined]
invokelatest at ./essentials.jl:1022 [inlined]
run_main_repl at ./client.jl:424
repl_main at ./client.jl:561 [inlined]
_start at ./client.jl:535
jfptr__start_65943.1 at /tmp/julia-2b939f7829/lib/julia/sys.so (unknown line)
jl_apply at /cache/build/builder-amdci5-2/julialang/julia-master/src/julia.h:2166 [inlined]
true_main at /cache/build/builder-amdci5-2/julialang/julia-master/src/jlapi.c:947
jl_repl_entrypoint at /cache/build/builder-amdci5-2/julialang/julia-master/src/jlapi.c:1106
main at /cache/build/builder-amdci5-2/julialang/julia-master/cli/loader_exe.c:58
unknown function (ip: 0x7355eed93ccf)
__libc_start_main at /usr/lib/libc.so.6 (unknown line)
unknown function (ip: 0x4010b8)
Allocations: 22561780 (Pool: 22558368; Big: 3412); GC: 29
Moelf commented 7 months ago

I think therer's some UnionAll related business happening and I have a hard time reproducing it outside of the function:

                contents = [out]
                for i = (firstindex(OtherTypes)+1):(lastindex(OtherTypes))
                    @show contents, i, UnmaskedArray{layout_for(OtherTypes[i])}
                    push!(contents, UnmaskedArray{layout_for(OtherTypes[i])})
                    @show i
                end
                UnionArray{Index8,Vector{Int64},Base.Tuple{contents...}}

crashes with

julia> AwkwardArray.from_iter(
           Vector{Union{Missing,Float64,Vector{Int64}}}([1.1, [1, 2], missing, [3]]),
       )

(contents, i, UnmaskedArray{layout_for(OtherTypes[i])}) = (UnionAll[AwkwardArray.ByteMaskedArray{AbstractVector{Int8}, AwkwardArray.PrimitiveArray{Float64, BUFFER} where BUFFER<:AbstractVector{Float64}}], 2, AwkwardArray.UnmaskedArray{AwkwardArray.ListOffsetArray{Vector{Int64}, AwkwardArray.PrimitiveArray{Int64, BUFFER} where BUFFER<:AbstractVector{Int64}}})
Unreachable reached at 0x7045d4c36fc6

so I hope to reproduce it outside of the code base with:

julia> contents = UnionAll[AwkwardArray.ByteMaskedArray{AbstractVector{Int8}, AwkwardArray.PrimitiveArray{Float64, BUFFER} where BUFFER<:AbstractVector{Float64}}];

julia> push!(contents, AwkwardArray.UnmaskedArray{AwkwardArray.ListOffsetArray{Vector{Int64}, AwkwardArray.PrimitiveArray{Int64, BUFFER} where BUFFER<:AbstractVector{Int64}}});

but this worked just fine