diff --git a/test/ruby/test_super.rb b/test/ruby/test_super.rb index 7c4beff07b..3d5af3d485 100644 --- a/test/ruby/test_super.rb +++ b/test/ruby/test_super.rb @@ -585,15 +585,22 @@ class TestSuper < Test::Unit::TestCase end def test_super_with_define_method - superklass = Class.new do + superklass1 = Class.new do def foo; :foo; end def bar; :bar; end + def boo; :boo; end end - subklass = Class.new(superklass) - [:foo, :bar].each do |sym| + superklass2 = Class.new(superklass1) do + alias baz boo + def boo; :boo2; end + end + subklass = Class.new(superklass2) + [:foo, :bar, :baz, :boo].each do |sym| subklass.define_method(sym){ super() } end assert_equal :foo, subklass.new.foo assert_equal :bar, subklass.new.bar + assert_equal :boo, subklass.new.baz + assert_equal :boo2, subklass.new.boo end end diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 9404b0d74a..acd5de4d5e 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -3161,7 +3161,7 @@ vm_search_super_method(const rb_control_frame_t *reg_cfp, struct rb_call_data *c if (LIKELY(RB_DEBUG_COUNTER_INC_UNLESS(mc_global_state_miss, GET_GLOBAL_METHOD_STATE() == cc->method_state) && cc->class_serial[0] == RCLASS_SERIAL(klass)) && - cc->me && ci->mid == cc->me->def->original_id) { + cc->me && ci->mid == cc->me->called_id) { VM_ASSERT(cc->call != NULL); RB_DEBUG_COUNTER_INC(mc_inline_hit); return;