From: merch-redmine@... Date: 2020-03-24T21:16:30+00:00 Subject: [ruby-core:97589] [Ruby master Bug#16736] Prepending blank module breaks super call in aliased method Issue #16736 has been updated by jeremyevans0 (Jeremy Evans). Pull request submitted: https://github.com/ruby/ruby/pull/2978 This includes a GC change to prevent a use-after-free, but I'm not sure if the change introduces a memory leak. Someone that knows more about GC and in what cases iclasses share method tables should probably review. This pull request also fixes an issue in `Module#included_modules` to handle origin iclasses for modules correctly. ---------------------------------------- Bug #16736: Prepending blank module breaks super call in aliased method https://bugs.ruby-lang.org/issues/16736#change-84772 * Author: tycooon (Yuri Smirnov) * Status: Assigned * Priority: Normal * Assignee: jeremyevans0 (Jeremy Evans) * ruby -v: 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-darwin19] * Backport: 2.5: DONTNEED, 2.6: DONTNEED, 2.7: REQUIRED ---------------------------------------- Here is the test script: ``` class A def key ["some_key"] end end module M prepend Module.new def self.included(base) base.alias_method :base_key, :key end def key super + ["new_key"] end def generate base_key end end class B < A include M end x = B.new p x.generate ``` In Ruby 2.7 I get the following error: ``` Traceback (most recent call last): 2: from test.rb:28:in `
' 1: from test.rb:19:in `generate' test.rb:15:in `key': super: no superclass method `key' for # (NoMethodError) ``` If I remove the `prepend Module.new` line or switch to Ruby 2.6, I get the expected result: ``` ["some_key", "new_key"] ``` -- https://bugs.ruby-lang.org/ Unsubscribe: