From: jacknagel@... Date: 2014-09-25T05:18:12+00:00 Subject: [ruby-core:65268] [ruby-trunk - Bug #10290] segfault when calling a lambda recursively after rescuing SystemStackError Issue #10290 has been updated by Jack Nagel. File ruby_2014-09-25-001644_haswell.log added As I noted, running the example code on trunk does not segfault (it raises SystemStackError a second time, as I would expect): ``` $ ruby -ve "l = -> { l.() }; begin; l.(); rescue SystemStackError; l.(); end" ruby 2.2.0dev (2014-09-25 trunk 47651) [x86_64-darwin13] -e:1:in `block in
': stack level too deep (SystemStackError) from -e:1:in `call' from -e:1:in `block in
' from -e:1:in `call' from -e:1:in `block in
' from -e:1:in `call' from -e:1:in `block in
' from -e:1:in `call' from -e:1:in `block in
' ... 9604 levels... from -e:1:in `call' from -e:1:in `block in
' from -e:1:in `call' from -e:1:in `
' ``` However, if I run the same code in IRB, it *does* segfault: ``` $ irb irb(main):001:0> RUBY_DESCRIPTION => "ruby 2.2.0dev (2014-09-25 trunk 47651) [x86_64-darwin13]" irb(main):002:0> l = -> { l.() }; begin; l.(); rescue SystemStackError; l.(); end Segmentation fault: 11 ``` I've attached the crash report for this one as well. ---------------------------------------- Bug #10290: segfault when calling a lambda recursively after rescuing SystemStackError https://bugs.ruby-lang.org/issues/10290#change-49093 * Author: Jack Nagel * Status: Open * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: ruby 2.1.3p242 (2014-09-19 revision 47629) [x86_64-darwin13.0] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- The following code segfaults on Ruby 2.1.3: ``` l = -> { l.() } begin l.() rescue SystemStackError l.() # segfault end ``` the issue does not occur on trunk. ---Files-------------------------------- ruby_2014-09-25-000925_haswell.log (46.4 KB) ruby_2014-09-25-001644_haswell.log (46.8 KB) -- https://bugs.ruby-lang.org/