Project

General

Profile

Actions

Bug #9475

closed

Behavior change with include + super + alias_method between 1.9.x and 2.x

Added by benweint (Ben Weintraub) almost 11 years ago. Updated over 10 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin12.0]
[ruby-core:60431]

Description

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) test.rb benweint (Ben Weintraub), 02/03/2014 08:21 PM

Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #9663: Segfault with alias_method and includeClosed03/22/2014Actions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0