Project

General

Profile

Actions

Bug #22077

open

Endless methods in 3.3.5 allows for endless rescues. 4.0 shows different behaviour

Bug #22077: Endless methods in 3.3.5 allows for endless rescues. 4.0 shows different behaviour

Added by jerome.paul@gmail.com (Jerome Paul) about 7 hours ago. Updated about 4 hours ago.

Status:
Open
Assignee:
Target version:
-
[ruby-core:125555]

Description

ruby 3.3.5 (2024-09-03 revision ef084cc8f4) [x86_64-linux]

irb(main):001> def endless = nil * 1000 rescue raise('surprise') rescue 'please stop'
=> :endless
irb(main):002> endless
=> "please stop"
irb(main):003> 

ruby 4.0.3 (2026-04-21 revision 85ddef263a) +PRISM [x86_64-linux]

irb(main):001> def endless = nil * 1000 rescue raise('surprise') rescue 'please stop'
=> :endless
irb(main):002> endless
(irb):1:in 'Object#endless': surprise (RuntimeError)
	from (irb):2:in '<main>'
	from /home/jerome/.rbenv/versions/4.0.3/lib/ruby/gems/4.0.0/gems/irb-1.16.0/exe/irb:9:in '<top (required)>'
	from /home/jerome/.rbenv/versions/4.0.3/lib/ruby/4.0.0/rubygems.rb:304:in 'Kernel#load'
	from /home/jerome/.rbenv/versions/4.0.3/lib/ruby/4.0.0/rubygems.rb:304:in 'Gem.activate_and_load_bin_path'
	from /home/jerome/.rbenv/versions/4.0.3/bin/irb:25:in '<main>'
(irb):1:in 'Object#endless': undefined method '*' for nil (NoMethodError)
	from (irb):2:in '<main>'
	from /home/jerome/.rbenv/versions/4.0.3/lib/ruby/gems/4.0.0/gems/irb-1.16.0/lib/irb/workspace.rb:110:in 'Kernel#eval'
	from /home/jerome/.rbenv/versions/4.0.3/lib/ruby/gems/4.0.0/gems/irb-1.16.0/lib/irb/workspace.rb:110:in 'IRB::WorkSpace#evaluate'
	from /home/jerome/.rbenv/versions/4.0.3/lib/ruby/gems/4.0.0/gems/irb-1.16.0/lib/irb/context.rb:591:in 'IRB::Context#evaluate_expression'
	from /home/jerome/.rbenv/versions/4.0.3/lib/ruby/gems/4.0.0/gems/irb-1.16.0/lib/irb/context.rb:557:in 'IRB::Context#evaluate'
	from /home/jerome/.rbenv/versions/4.0.3/lib/ruby/gems/4.0.0/gems/irb-1.16.0/lib/irb.rb:202:in 'block (2 levels) in IRB::Irb#eval_input'
	from /home/jerome/.rbenv/versions/4.0.3/lib/ruby/gems/4.0.0/gems/irb-1.16.0/lib/irb.rb:521:in 'IRB::Irb#signal_status'
	from /home/jerome/.rbenv/versions/4.0.3/lib/ruby/gems/4.0.0/gems/irb-1.16.0/lib/irb.rb:194:in 'block in IRB::Irb#eval_input'
	from /home/jerome/.rbenv/versions/4.0.3/lib/ruby/gems/4.0.0/gems/irb-1.16.0/lib/irb.rb:281:in 'block in IRB::Irb#each_top_level_statement'
	from /home/jerome/.rbenv/versions/4.0.3/lib/ruby/gems/4.0.0/gems/irb-1.16.0/lib/irb.rb:278:in 'Kernel#loop'
	from /home/jerome/.rbenv/versions/4.0.3/lib/ruby/gems/4.0.0/gems/irb-1.16.0/lib/irb.rb:278:in 'IRB::Irb#each_top_level_statement'
	from /home/jerome/.rbenv/versions/4.0.3/lib/ruby/gems/4.0.0/gems/irb-1.16.0/lib/irb.rb:193:in 'IRB::Irb#eval_input'
	from /home/jerome/.rbenv/versions/4.0.3/lib/ruby/gems/4.0.0/gems/irb-1.16.0/lib/irb.rb:174:in 'block in IRB::Irb#run'
	from /home/jerome/.rbenv/versions/4.0.3/lib/ruby/gems/4.0.0/gems/irb-1.16.0/lib/irb.rb:173:in 'Kernel#catch'
	from /home/jerome/.rbenv/versions/4.0.3/lib/ruby/gems/4.0.0/gems/irb-1.16.0/lib/irb.rb:173:in 'IRB::Irb#run'
	from /home/jerome/.rbenv/versions/4.0.3/lib/ruby/gems/4.0.0/gems/irb-1.16.0/lib/irb.rb:54:in 'IRB.start'
	... 4 levels...

ruby 3.4.3 (2025-04-14 revision d0b7e5b6a0) +PRISM [x86_64-linux] shows the same behaviour as 4.0.3.

Being honest I don't think endless methods should allow for endless rescues! So the behaviour since at least 3.4.3 is IMO close to correct however instead of a runtime error I would expect a SyntaxError.


Related issues 1 (0 open1 closed)

Related to Ruby - Bug #21048: [Prism] rescue in modifier form with condition behaves differentlyClosedprismActions

Updated by nobu (Nobuyoshi Nakada) about 6 hours ago Actions #1

  • Assignee set to prism

Updated by Earlopain (Earlopain _) about 4 hours ago Actions #3

  • Related to Bug #21048: [Prism] rescue in modifier form with condition behaves differently added
Actions

Also available in: PDF Atom