Closed
Description
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