
Issue #21001 has been updated by ydah (Yudai Takada). Note) This does not occur even in Ruby 3.4.1 when `--parser=parse.y`. ``` ❯ ruby --parser=parse.y -e 'puts "Ruby: #{RUBY_VERSION}" # okay all versions # RUN_ARRAY = [1] # fails ruby 3.4 only RUN_ARRAY = [1,2] MAP_PROC = Proc.new do |&blk| block_results = [] RUN_ARRAY.each do |value| block_value = blk.call(value) block_results.push block_value end block_results ensure next block_results end test_fn_results = MAP_PROC.call do |value| break if value > 1 next value end puts test_fn_results.inspect' Ruby: 3.4.1 [1] ``` ---------------------------------------- Bug #21001: unexpected nil result from proc with ensure and next https://bugs.ruby-lang.org/issues/21001#change-111264 * Author: aharpervc (Andrew Harper) * Status: Open * ruby -v: ruby 3.4.1 (2024-12-25 revision 48d4efcb85) +PRISM [x86_64-linux] * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- Hello, I have noticed a different program behavior in Ruby 3.4 compared to previous versions. This is a simplified example for debugging that returns the expected result in Ruby 3.3 but nil in Ruby 3.4 Here is the example program: ``` ruby puts "Ruby: #{RUBY_VERSION}" # okay all versions # RUN_ARRAY = [1] # fails ruby 3.4 only RUN_ARRAY = [1,2] MAP_PROC = Proc.new do |&blk| block_results = [] RUN_ARRAY.each do |value| block_value = blk.call(value) block_results.push block_value end block_results ensure next block_results end test_fn_results = MAP_PROC.call do |value| break if value > 1 next value end puts test_fn_results.inspect ``` For Ruby 3.3.6 the output is: ``` Ruby: 3.3.6 [1] ``` For Ruby 3.4.1 the output is: ``` Ruby: 3.4.1 nil ``` I am expecting the Ruby 3.3 output even for Ruby 3.4. This appears to be a bug, since the program implementation is unchanged. Perhaps there is a bug in the code that is now only showing up with Ruby 3.4, but that seemed unlikely since it's working as expected in other versions. Thank you -- https://bugs.ruby-lang.org/