From: "nobu (Nobuyoshi Nakada)" Date: 2014-01-08T23:12:53+09:00 Subject: [ruby-core:59646] [ruby-trunk - Bug #9377] Seg fault on call of missing super from self.extended in a Module Issue #9377 has been updated by nobu (Nobuyoshi Nakada). Backport changed from 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN to 1.9.3: DONTNEED, 2.0.0: REQUIRED, 2.1: REQUIRED Since 2.0, vm_search_superclass() doesn't traverse the receiver's ancestors. It works just because an invalid klass is not dereferenced accidentally. ---------------------------------------- Bug #9377: Seg fault on call of missing super from self.extended in a Module https://bugs.ruby-lang.org/issues/9377#change-44173 Author: jemc (Joe McIlvain) Status: Closed Priority: Normal Assignee: Category: Target version: ruby -v: 2.1.0 Backport: 1.9.3: DONTNEED, 2.0.0: REQUIRED, 2.1: REQUIRED =begin Seg fault on call of missing super from self.extended in a Module on 2.1.0-p0 and on 2.1.0-dev x86_64 linux Code to reproduce: module A def foo; super end def self.extended(obj) instance_method(:foo).bind(obj).call end end Object.new.extend A (stack trace is attached) Note that calling from after extend is okay: (but raises missing super error) module A def foo; super end end Object.new.extend(A).foo #=> in `foo': super: no superclass method `foo' for # (NoMethodError) Also note that calling from within the extend as before, but having the method defined is also okay (and raises no error) module ABase def foo; end end module A include ABase def foo; super end def self.extended(obj) instance_method(:foo).bind(obj).call end end Object.new.extend A =end -- http://bugs.ruby-lang.org/