summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2022-02-22 13:43:14 -0800
committerJeremy Evans <code@jeremyevans.net>2022-03-10 08:35:26 -0800
commit0c6e24d102e894a7211a596e6aa95828b1cf4406 (patch)
treef223c3105010c2d8608b29151127c3715c65b1b9
parent7f5440756eb70117c3f884ea896c10bca8476b33 (diff)
downloadruby-0c6e24d102e894a7211a596e6aa95828b1cf4406.tar.gz
Fix visibility of alias of zsuper methods
This was broken by 71c746379d5872e250d90ae45c585760afaf9516. Fixes [Bug #18600]
-rw-r--r--test/ruby/test_alias.rb10
-rw-r--r--vm_method.c1
2 files changed, 11 insertions, 0 deletions
diff --git a/test/ruby/test_alias.rb b/test/ruby/test_alias.rb
index 99f2223b49..0d33cb993c 100644
--- a/test/ruby/test_alias.rb
+++ b/test/ruby/test_alias.rb
@@ -265,6 +265,16 @@ class TestAlias < Test::Unit::TestCase
end;
end
+ class C2
+ public :system
+ alias_method :bar, :system
+ alias_method :system, :bar
+ end
+
+ def test_zsuper_alias_visibility
+ assert(C2.new.respond_to?(:system))
+ end
+
def test_alias_memory_leak
assert_no_memory_leak([], "#{<<~"begin;"}", "#{<<~'end;'}", rss: true)
begin;
diff --git a/vm_method.c b/vm_method.c
index edbaad2396..0400aab801 100644
--- a/vm_method.c
+++ b/vm_method.c
@@ -2146,6 +2146,7 @@ rb_alias(VALUE klass, ID alias_name, ID original_name)
visi = METHOD_ENTRY_VISI(orig_me);
goto again;
case VM_METHOD_TYPE_ALIAS:
+ visi = METHOD_ENTRY_VISI(orig_me);
orig_me = orig_me->def->body.alias.original_me;
VM_ASSERT(orig_me->def->type != VM_METHOD_TYPE_ALIAS);
break;