Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unwrapped Union Alls can't be added more than two times to a vector with [] syntax. Reproducible crash when using these vectors. #54418

Open
camilodlt opened this issue May 9, 2024 · 1 comment

Comments

@camilodlt
Copy link

camilodlt commented May 9, 2024

Version Info

julia> versioninfo()
Julia Version 1.10.3
Commit 0b4590a5507 (2024-04-30 10:59 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: 12 × Intel(R) Core(TM) i7-10850H CPU @ 2.70GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-15.0.7 (ORCJIT, skylake)
Threads: 1 default, 0 interactive, 1 GC (on 12 virtual cores)

Installation

(base) ➜  ~ juliaup add 1.10~x64
'1.10~x64' is already installed.

MWE

If we define and unwrap an UnionAll datatype and then try to add it multiple times to a vector with the syntax [item, item, ...] it doesn't work. It is, at most, added two times to a vector.

julia> a = Base.unwrap_unionall(AbstractMatrix{<:Tuple})
AbstractArray{var"#s1"<:Tuple, 2}

julia> length([a]) # ok
1

julia> length([a,a]) # ok 
2

julia> length([a,a,a]) # not ok 
2

julia> length([a,a,a,a]) # not ok
2

Using push! works :

julia> v = []
Any[]

julia> push!(v, a,a,a,a,a)
5-element Vector{Any}:
 AbstractArray{var"#s1"<:Tuple, 2}
 AbstractArray{var"#s1"<:Tuple, 2}
 AbstractArray{var"#s1"<:Tuple, 2}
 AbstractArray{var"#s1"<:Tuple, 2}
 AbstractArray{var"#s1"<:Tuple, 2}

Collecting a tuple with the items also works :

julia> collect((a, a, a))
3-element Vector{DataType}:
 AbstractArray{var"#s1"<:Tuple, 2}
 AbstractArray{var"#s1"<:Tuple, 2}
 AbstractArray{var"#s1"<:Tuple, 2}

So it seems to be a problem with the syntax [].

Furthermore, I can make Julia crash and segfault if I try to add the vectors created by [] to a struct like this:

julia> struct st
               v1::Vector{<:T} where {T<:Union{UnionAll,DataType}}
               v2::Vector{<:T} where {T<:Union{UnionAll,DataType}}
       end

julia> st([a,a,a], [a])

[53548] signal (11.1): Segmentation fault
in expression starting at REPL[10]:1
sig_match_simple at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/typemap.c:212 [inlined]
jl_typemap_entry_assoc_exact at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/typemap.c:1155
jl_typemap_assoc_exact at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/julia_internal.h:1435 [inlined]
jl_lookup_generic_ at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/gf.c:3017 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/gf.c:3073
vect at ./array.jl:165
_jl_invoke at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_apply at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
do_call at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/interpreter.c:126
eval_value at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/interpreter.c:223
eval_stmt_value at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/interpreter.c:174 [inlined]
eval_body at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/interpreter.c:617
jl_interpret_toplevel_thunk at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/interpreter.c:775
jl_toplevel_eval_flex at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/toplevel.c:934
jl_toplevel_eval_flex at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/toplevel.c:877
ijl_toplevel_eval_in at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/toplevel.c:985
eval at ./boot.jl:385 [inlined]
eval_user_input at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:150
repl_backend_loop at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:246
#start_repl_backend#46 at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:231
start_repl_backend at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:228
_jl_invoke at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/gf.c:3077
#run_repl#59 at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:389
run_repl at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:375
jfptr_run_repl_91734.1 at /home/irit/.julia/juliaup/julia-1.10.3+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/gf.c:3077
#1013 at ./client.jl:432
jfptr_YY.1013_82700.1 at /home/irit/.julia/juliaup/julia-1.10.3+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_apply at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
jl_f__call_latest at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/builtins.c:812
#invokelatest#2 at ./essentials.jl:892 [inlined]
invokelatest at ./essentials.jl:889 [inlined]
run_main_repl at ./client.jl:416
exec_options at ./client.jl:333
_start at ./client.jl:552
jfptr__start_82726.1 at /home/irit/.julia/juliaup/julia-1.10.3+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_apply at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
true_main at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/jlapi.c:582
jl_repl_entrypoint at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/src/jlapi.c:731
main at /cache/build/builder-amdci4-2/julialang/julia-release-1-dot-10/cli/loader_exe.c:58
unknown function (ip: 0x710a21c29d8f)
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x4010b8)
Allocations: 1563065 (Pool: 1562180; Big: 885); GC: 2
[1]    53548 segmentation fault (core dumped)  julia

We discussed a little about this in slack : https://julialang.slack.com/archives/C6A044SQH/p1715192935098339

@inkydragon
Copy link
Sponsor Member

inkydragon commented May 15, 2024

test code:

a = Base.unwrap_unionall(AbstractMatrix{<:Tuple})
struct st;  v1; v2;  end
st([a,a,a], [a])

Windows (x86_64-w64-mingw32)

  • v1.6.7: ✅ good
  • v1.8.5: ❌ error, ERROR: BoundsError: attempt to access Tuple{DataType} at index [2]
  • v1.9.4: ❌ error, ERROR: BoundsError: attempt to access Tuple{DataType} at index [2]
  • v1.10.3: ❌ crash, Exception: EXCEPTION_ACCESS_VIOLATION
  • v1.11.0-beta1: ❌ crash, Exception: EXCEPTION_ACCESS_VIOLATION
  • v1.12.0-DEV.532: ✅ good

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants