Skip to content

Unreachable reached (illegal instruction) in SimJulia on 1.3 #33370

Closed
@KristofferC

Description

@KristofferC

After some discussion in JuliaDynamics/ConcurrentSim.jl#63 it seems the following is a regression in 1.3. Running (where some of this code has been macroexpanded from ResumableFunctions):

using ResumableFunctions
using SimJulia

mutable struct var"##403" <: ResumableFunctions.FiniteStateMachineIterator{Any}
    _state::UInt8
    sim::Simulation
    a::Int64
    b::Int64
    function var"##403"(sim::Simulation; )::var"##403"
        fsmi = new()
        fsmi._state = 0x00
        fsmi.sim = sim
        fsmi
    end
end
function fibonnaci(sim::Simulation; )::var"##403"
    var"##403"(sim; )
end
function (_fsmi::var"##403")(_arg::Any=nothing; )::Union{Any, Nothing, Bool}
    _fsmi._state == 0x00 && @goto(_STATE_0)
    _fsmi._state == 0x01 && @goto(_STATE_1)
    error("@resumable function has stopped!")
    @label _STATE_0
    _fsmi._state = 0xff
    _arg isa Exception && throw(_arg)
    _fsmi.a = 0
    _fsmi.b = 1
    while true
        println(_fsmi.a)
        _fsmi._state = 0x01
        return timeout(_fsmi.sim, 1)
        @label _STATE_1
        _fsmi._state = 0xff
        _arg isa Exception && throw(_arg)
        (_fsmi.a, _fsmi.b) = (_fsmi.b, _fsmi.a + _fsmi.b)
    end
end

sim = Simulation()
@process fibonnaci(sim)
run(sim, 10)

crashes with

0
Unreachable reached at 0x7f1ab3271abf

signal (4): Illegal instruction
in expression starting at /home/kc/Documents/JuliaTests/failing.jl:44
execute at /home/kc/.julia/packages/SimJulia/alkAr/src/processes.jl:32
#3 at /home/kc/.julia/packages/SimJulia/alkAr/src/base.jl:51
_jl_invoke at /home/kc/julia/src/gf.c:2136 [inlined]
jl_apply_generic at /home/kc/julia/src/gf.c:2300
step at /home/kc/.julia/packages/SimJulia/alkAr/src/simulations.jl:39
run at /home/kc/.julia/packages/SimJulia/alkAr/src/base.jl:91
run at /home/kc/.julia/packages/SimJulia/alkAr/src/events.jl:29
unknown function (ip: 0x7f1ab3270cf6)
_jl_invoke at /home/kc/julia/src/gf.c:2136 [inlined]
jl_apply_generic at /home/kc/julia/src/gf.c:2300
jl_apply at /home/kc/julia/src/julia.h:1631 [inlined]
do_call at /home/kc/julia/src/interpreter.c:328
eval_value at /home/kc/julia/src/interpreter.c:417
eval_stmt_value at /home/kc/julia/src/interpreter.c:368 [inlined]
eval_body at /home/kc/julia/src/interpreter.c:764
jl_interpret_toplevel_thunk_callback at /home/kc/julia/src/interpreter.c:888
unknown function (ip: 0xfffffffffffffffe)
unknown function (ip: 0x7f1acf11458f)
unknown function (ip: 0xffffffffffffffff)
jl_interpret_toplevel_thunk at /home/kc/julia/src/interpreter.c:897
jl_toplevel_eval_flex at /home/kc/julia/src/toplevel.c:814
jl_parse_eval_all at /home/kc/julia/src/ast.c:873
jl_load at /home/kc/julia/src/toplevel.c:878
include at ./boot.jl:328 [inlined]
include_relative at ./loading.jl:1105
include at ./Base.jl:31
_jl_invoke at /home/kc/julia/src/gf.c:2130 [inlined]
jl_apply_generic at /home/kc/julia/src/gf.c:2300
exec_options at ./client.jl:295
_start at ./client.jl:468
jfptr__start_2083 at /home/kc/julia/usr/lib/julia/sys.so (unknown line)
_jl_invoke at /home/kc/julia/src/gf.c:2130 [inlined]
jl_apply_generic at /home/kc/julia/src/gf.c:2300
jl_apply at /home/kc/julia/ui/../src/julia.h:1631 [inlined]
true_main at /home/kc/julia/ui/repl.c:96
main at /home/kc/julia/ui/repl.c:217
__libc_start_main at /build/glibc-KRRWSm/glibc-2.29/csu/../csu/libc-start.c:308
_start at /home/kc/julia/julia (unknown line)
Allocations: 744501 (Pool: 744209; Big: 292); GC: 1
[1]    27250 illegal hardware instruction (core dumped)  ~/julia/julia failing.jl

Running the code through JuliaInterpreter works fine.

Also, just renaming the variable var"##403" to something else, (like MyTest) makes the code work:

diff working.jl failing.jl
< mutable struct MyTest <: ResumableFunctions.FiniteStateMachineIterator{Any}
---
> mutable struct var"##403" <: ResumableFunctions.FiniteStateMachineIterator{Any}
10c9
<     function MyTest(sim::Simulation; )::MyTest
---
>     function var"##403"(sim::Simulation; )::var"##403"
17,18c16,17
< function fibonnaci(sim::Simulation; )::MyTest
<     MyTest(sim; )
---
> function fibonnaci(sim::Simulation; )::var"##403"
>     var"##403"(sim; )
20c19
< function (_fsmi::MyTest)(_arg::Any=nothing; )::Union{Any, Nothing, Bool}
---
> function (_fsmi::var"##403")(_arg::Any=nothing; )::Union{Any, Nothing, Bool}
➜  ~/julia/julia working.jl
0
1
1
2
3
5
8
13
21
34

Metadata

Metadata

Assignees

Labels

bugIndicates an unexpected problem or unintended behaviorpriorityThis should be addressed urgentlyregressionRegression in behavior compared to a previous version

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions