FluxML / FluxML/IRTools.jl

Dynamo constructed from empty IR segfaults when forgetting a return branch

Open
#15 0 comments 1 reaction 0 assignees View on GitHub
Dominant language
Julia
Stars
113
Forks
37
PR merge metrics
No merged PRs in 30d

Description

```
julia> IRTools.@dynamo function test1(a...)
ir = empty(IRTools.IR(a...))
push!(ir, IRTools.xcall(Main, :println, "hi"))
return ir
end

julia> test1(identity, 1)
hi

signal (11): Segmentation fault
in expression starting at no file:0
unknown function (ip: 0x7f602cb42d60)
unknown function (ip: 0x7f60358e3007)
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2182
do_call at /buildworker/worker/package_linux64/build/src/interpreter.c:324
eval_value at /buildworker/worker/package_linux64/build/src/interpreter.c:428
eval_stmt_value at /buildworker/worker/package_linux64/build/src/interpreter.c:363 [inlined]
eval_body at /buildworker/worker/package_linux64/build/src/interpreter.c:686
jl_interpret_toplevel_thunk_callback at /buildworker/worker/package_linux64/build/src/interpreter.c:799
unknown function (ip: 0xfffffffffffffffe)
unknown function (ip: 0x7f5fea72cd2f)
unknown function (ip: 0xffffffffffffffff)
jl_interpret_toplevel_thunk at /buildworker/worker/package_linux64/build/src/interpreter.c:808
jl_toplevel_eval_flex at /buildworker/worker/package_linux64/build/src/toplevel.c:787
jl_toplevel_eval_in at /buildworker/worker/package_linux64/build/src/builtins.c:622
eval at ./boot.jl:319
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2182
eval_user_input at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.0/REPL/src/REPL.jl:85
run_backend at /home/philipp/.julia/packages/Revise/agmgx/src/Revise.jl:949
#75 at ./task.jl:259
jl_fptr_trampoline at /buildworker/worker/package_linux64/build/src/gf.c:1829
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2182
jl_apply at /buildworker/worker/package_linux64/build/src/julia.h:1536 [inlined]
start_task at /buildworker/worker/package_linux64/build/src/task.c:268
unknown function (ip: 0xffffffffffffffff)
Allocations: 45007363 (Pool: 45001629; Big: 5734); GC: 102
[1] 7873 segmentation fault (core dumped) julia
```

The following works as expected instead:

```
julia> IRTools.@dynamo function test2(a...)
ir = empty(IRTools.IR(a...))
push!(ir, IRTools.xcall(Main, :println, "hi"))
IRTools.return!(ir, nothing)
return ir
end

julia> test2(identity, 1)
hi

```

Contributor guide

No contributing guide indexed for this repository

Research direction

Reproduce the failure with the test1 IRTools.@dynamo example, then compare its empty IR and push! sequence with test2, which calls IRTools.return!. Trace how the generated IR handles the missing return branch. Done means the test1 behavior no longer segfaults and matches the explicit-return case.

Written by the indexing model from the issue text.

Assessment

Tech stack
julia
Domain
compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.