From: minorityland@... Date: 2017-09-30T11:32:36+00:00 Subject: [ruby-dev:50270] [Ruby trunk Bug#13956] Segmentation fault when calling Method#using with a non-module argument and block Issue #13956 has been reported by minoritea (Minori Tokuda). ---------------------------------------- Bug #13956: Segmentation fault when calling Method#using with a non-module argument and block https://bugs.ruby-lang.org/issues/13956 * Author: minoritea (Minori Tokuda) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin16] * Backport: 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- Module#usingをモジュールでない引数とブロックをつけて呼び出すとクラッシュします。 再現プログラムは以下です。 ~~~ ruby def using(x) yield x end using(1){ } ~~~ 元々、別のメソッドに**using**と名付けてそれを呼び出すコードを書いてました(Module#usingの存在は失念していました)。 なぜそうなるのか理解していないのですが、トップレベルで定義したメソッドはModuleのメソッドをオーバーライドしないようで、 とにかく結果としてはModule#usingが呼ばれました。 元々の意図が分かりやすいよう、再現プログラムには**using**のメソッド定義を含めていますが、 Top-levelに**using**のメソッド定義があろうとなかろうとクラッシュは発生します。 Top-level以外のスコープでも同様のクラッシュは発生しますが、詳細には確認していません。 クラスやモジュールの定義の中で再現することは確認しました。 ~~~ OS: macOS Sierra(10.12.6) CPU: 2.2Ghz Intel Core i7 Memory: 16GB Ruby version: ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin16] installed by ruby-build ~~~ ---Files-------------------------------- crash_report.txt (6.63 KB) ruby_2017-09-30-200248_mtmbp15.crash (11.4 KB) segfault_on_using.rb (40 Bytes) -- https://bugs.ruby-lang.org/