👌

[Bug #20344] argument stack underflow (-1) が発生するバグ報告

2024/08/17に公開

[Bug #20344] argument stack underflow (-1)

  • 次のコードが Ruby 2.5 以降で argument stack underflow (-1) (SyntaxError) が発生するというバグ報告
proc do
  next if true

  case nil
  when "a"
    next
  when "b"
  when "c"
    proc {}
  end

  next unless true
end
-- raw disasm--------
   trace: 100
   0000 nop                                                              (   1)
 <L000> [sp: 0]
   trace: 1
 <L004> [sp: 0]
   adjust: [label: 0]
   0001 putnil                                                           (   2)
   0002 leave                                                            (  13)
 <L008> [sp: 1]
   adjust: [label: 0]
   0003 putnil                                                           (   6)
   0004 leave                                                            (  13)
   adjust: [label: 8]
   0005 jump                 <L005>                                      (   5)
   0007 pop                                                              (   7)
   0008 jump                 <L005>                                      (   7)
*  0010 pop                                                              (   8)
   trace: 1
 <L011> [sp: -1]
   0011 putself                                                          (   9)
   0012 send                 <calldata:proc, 0>, nil                     (   9)
 <L012> [sp: -1]
   0015 pop                                                              (   9)
 <L005> [sp: 1]
   trace: 1
   0016 putnil                                                           (  12)
 <L001> [sp: -1]
   trace: 200
   0017 leave                                                            (  13)
---------------------
test.rb: 
test.rb:8: argument stack underflow (-1) (SyntaxError)
  • 1行でもかけると再現しなくなるんですがどういう不具合なんだこれ
  • このバグは開発版の Ruby 3.4 ですでに修正済みです
GitHubで編集を提案

Discussion