Bug #21648
Updated by Earlopain (Earlopain _) about 11 hours ago
```sh $ ruby -e "for * in [10]; end" -e:1: [BUG] Stack consistency error (sp: 15, bp: 14) ruby 3.4.6 (2025-09-16 revision dbd83256b1) +PRISM [x86_64-linux] -- Control frame information ----------------------------------------------- c:0004 p:0008 s:0015 e:000013 BLOCK -e:1 [FINISH] c:0003 p:---- s:0010 e:000009 CFUNC :each c:0002 p:0005 s:0006 e:000005 EVAL -e:1 [FINISH] c:0001 p:0000 s:0003 E:0014c0 DUMMY [FINISH] ... ``` `parse.y` handles this. Seems like this is getting miscompiled somewhere: ```diff diff --git a/test.txt b/test.txt index d1c4ff74..5f2616e4 100644 --- a/test.txt +++ b/test.txt @@ -1,4 +1,4 @@ -ruby --dump=insn -e "for * in [10]; end" +$ ruby --parser=parse.y --dump=insn -e "for * in [10]; end" == disasm: #<ISeq:<main>@-e:1 (1,0)-(1,18)> 0000 duparray [10] ( 1)[Li] 0002 send <calldata!mid:each, argc:0>, block in <main> @@ -8,7 +8,22 @@ ruby --dump=insn -e "for * in [10]; end" local table (size: 1, argc: 0 [opts: 0, rest: 0, post: 0, block: -1, kw: -1@-1, kwrest: -1]) [ 1] ?@0<Rest> 0000 getlocal_WC_0 ?@0 ( 1) -0002 expandarray 1, 0 -0005 nop [Bc] -0006 putnil -0007 leave [Br] +0002 dup +0003 opt_length <calldata!mid:length, argc:0, FCALL|ARGS_SIMPLE>[CcCr] +0005 putobject_INT2FIX_1_ +0006 opt_eq <calldata!mid:==, argc:1, FCALL|ARGS_SIMPLE>[CcCr] +0008 branchunless 24 +0010 dup +0011 putobject_INT2FIX_0_ +0012 opt_aref <calldata!mid:[], argc:1, FCALL|ARGS_SIMPLE>[CcCr] +0014 putobject Array +0016 swap +0017 opt_send_without_block <calldata!mid:try_convert, argc:1, FCALL|ARGS_SIMPLE> +0019 dup +0020 branchunless 23 +0022 swap +0023 pop +0024 expandarray 0, 0 +0027 nop [Bc] +0028 putnil +0029 leave [Br] ```