This code kills Julia 1.9 RC1

abstract type VgtkNum end

struct VgtkInt{T <: Integer} <: VgtkNum
    int::T
end

VgtkInt(::Val{N}) where N <: Integer = VgtkInt(N)
VgtkInt(x::AbstractFloat) = VgtkInt(trunc(Int, x))

struct VgtkFloat{T <: AbstractFloat} <: VgtkNum
   float::T
end

VgtkFloat(x::Integer) = VgtkFloat(float(x))

value(x::VgtkInt) = x.int
value(x::VgtkFloat) = x.float 

Base.:(+)(a::VgtkInt, b::VgtkInt) = VgtkInt(a.int + b.int)
Base.:(+)(a::VgtkFloat, b::VgtkFloat) = VgtkFloat(a.float + b.float)
Base.:(+)(a::VgtkNum, b::VgtkNum) = VgtkFloat(value(a) + value(b))

neltype(x) = neltype(typeof(x))
neltype(::Type{T}) where T <: AbstractArray = neltype(eltype(T))
neltype(::Type{T}) where T = T


const PointRpN{N, T <: AbstractFloat} = SVector{value(VgtkInt(Val(N))+VgtkInt(1)), T} 
const PointRp2{T <: AbstractFloat} = PointRpN{2, T}
const LineRp2{T <:  AbstractFloat} = SVector{3, T}

I can confirm

using StaticArrays
...
julia> const PointRpN{N, T <: AbstractFloat} = SVector{value(VgtkInt(Val(N))+VgtkInt(1)), T}

[25959] signal (11.1): Segmentation fault
in expression starting at REPL[16]:1
jl_f_tuple at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/builtins.c:835 [inlined]
jl_f_tuple at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/builtins.c:825
jl_method_error at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2065
jl_lookup_generic_ at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2894 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2909
jl_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/julia.h:1878 [inlined]
do_call at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:126
eval_value at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:226
eval_stmt_value at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:177 [inlined]
eval_body at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:624
jl_interpret_toplevel_thunk at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/interpreter.c:762
jl_toplevel_eval_flex at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:912
jl_toplevel_eval_flex at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:856
ijl_toplevel_eval_in at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/toplevel.c:971
eval at ./boot.jl:370 [inlined]
eval_user_input at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:153
repl_backend_loop at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:249
#start_repl_backend#46 at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:234
start_repl_backend at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:231
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2731 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2913
#run_repl#59 at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:377
run_repl at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:363
jfptr_run_repl_60577.clone_1 at /home/fredrikb/.julia/juliaup/julia-1.9.0-rc1+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2731 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2913
#1017 at ./client.jl:421
jfptr_YY.1017_27809.clone_1 at /home/fredrikb/.julia/juliaup/julia-1.9.0-rc1+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2731 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2913
jl_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/julia.h:1878 [inlined]
jl_f__call_latest at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/builtins.c:774
#invokelatest#2 at ./essentials.jl:816 [inlined]
invokelatest at ./essentials.jl:813 [inlined]
run_main_repl at ./client.jl:405
exec_options at ./client.jl:322
_start at ./client.jl:522
jfptr__start_33350.clone_1 at /home/fredrikb/.julia/juliaup/julia-1.9.0-rc1+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2731 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/gf.c:2913
jl_apply at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/julia.h:1878 [inlined]
true_main at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/jlapi.c:573
jl_repl_entrypoint at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/src/jlapi.c:717
main at /cache/build/default-amdci5-5/julialang/julia-release-1-dot-9/cli/loader_exe.c:59
unknown function (ip: 0x7fd62e403d8f)
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x401098)
Allocations: 2007736 (Pool: 2007264; Big: 472); GC: 3
Segmentation fault (core dumped)

Regardless, I don’t think what I’m trying to do is possible in Julia. I want to add a number to a constant type parameter of a type alias and forward it to a parameterized struct. In this case, I’m adding 1 to the dimension of an SVector.

Nonetheless , this shouldn’t segfault, and throw a meaningful error if this is not possible. Would you mind filing an issue with Julia?

1 Like

I’ll put it on the GitHub.

Am I correct that I cannot achieve what I suggest?

I think this can’t be done

thanks