Dynamo constructed from empty IR segfaults when forgetting a return branch
- 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