From: benweint@... Date: 2014-02-03T20:22:52+00:00 Subject: [ruby-core:60431] [ruby-trunk - Bug #9475] [Open] Behavior change with include + super + alias_method between 1.9.x and 2.x Issue #9475 has been reported by Ben Weintraub. ---------------------------------------- Bug #9475: Behavior change with include + super + alias_method between 1.9.x and 2.x https://bugs.ruby-lang.org/issues/9475 * Author: Ben Weintraub * Status: Open * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin12.0] * Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- Ruby 2.0 appears to have introduced a subtle behavior change in method resolution that persists in 2.1.0. The attached test case (also visible online at https://gist.github.com/benweint/8791007) is extracted from an actual application, and while I won't defend the need to do something like this, it is clear that the behavior changed in 2.0. Note that this sounds similar to https://bugs.ruby-lang.org/issues/9236 but is in fact distinct - the test case given in that bug was fixed in Ruby 2.1. Steps to reproduce: 1. Run the attached testcase on Ruby 1.9.3 note the output 2. Run the attached testcase on Ruby 2.0.0-p353 or 2.1.0-p0, and note the output Expected results: While it's certainly not obvious to me what 'should' happen when executing this code, on 1.9.3, it produces this output: foo from C foo from B foo from A Actual results: On 2.0+, I get this instead foo from C foo from B foo from B (again) foo from B foo from B (again) foo from B ... previous two lines repeated many times ... test.rb:11: stack level too deep (SystemStackError) That is to say, on 2.0, we get into an infinitely recursive loop that doesn't happen with 1.9.3. ---Files-------------------------------- test.rb (340 Bytes) -- http://bugs.ruby-lang.org/