Skip to content

Backport 3.4: Add pushtoarray insn to fix segfault with forwarding + splat#15869

Merged
nagachika merged 1 commit intoruby:ruby_3_4from
Shopify:rwstauner/backport-34-fwd-splat
Jan 25, 2026
Merged

Backport 3.4: Add pushtoarray insn to fix segfault with forwarding + splat#15869
nagachika merged 1 commit intoruby:ruby_3_4from
Shopify:rwstauner/backport-34-fwd-splat

Conversation

@rwstauner
Copy link
Copy Markdown
Contributor

@rwstauner rwstauner commented Jan 14, 2026

Backporting #15855

Example insns diff for def x = [3]; def a(...) = b(*x, 2, 3, ...)

 == disasm: #<ISeq:a@-e:1 (1,13)-(1,42)>
 local table (size: 1, argc: 0 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1])
 [ 1] "..."@0
 0000 putself                                                          (   1)[Ca]
 0000 putself
 0000 opt_send_without_block                 <calldata!mid:x, argc:0, FCALL|VCALL|ARGS_SIMPLE>
 0000 splatarray                             true
 0000 putobject                              2
 0000 putobject                              3
+0000 pushtoarray                            2
 0000 getlocal_WC_0                          "..."@0
 0000 sendforward                            <calldata!mid:b, argc:1, ARGS_SPLAT|ARGS_SPLAT_MUT|FCALL|FORWARDING>, nil
 0000 leave                                  [Re]

This matches the insns produced by parse.y

Example insns diff for `def x = [3]; def a(...) = b(*x, 2, 3, ...)`

     == disasm: #<ISeq:a@-e:1 (1,13)-(1,42)>
     local table (size: 1, argc: 0 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1])
     [ 1] "..."@0
     0000 putself                                                          (   1)[Ca]
     0000 putself
     0000 opt_send_without_block                 <calldata!mid:x, argc:0, FCALL|VCALL|ARGS_SIMPLE>
     0000 splatarray                             true
     0000 putobject                              2
     0000 putobject                              3
    +0000 pushtoarray                            2
     0000 getlocal_WC_0                          "..."@0
     0000 sendforward                            <calldata!mid:b, argc:1, ARGS_SPLAT|ARGS_SPLAT_MUT|FCALL|FORWARDING>, nil
     0000 leave                                  [Re]

This matches the insns produced by parse.y
@nagachika nagachika merged commit 02eb4ee into ruby:ruby_3_4 Jan 25, 2026
74 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants