From: usa@... Date: 2017-08-09T08:57:10+00:00 Subject: [ruby-dev:50198] [Ruby trunk Bug#13766] Ruby 2.3.4 build problem with "-fstack-check" Issue #13766 has been updated by usa (Usaku NAKAMURA). Backport changed from 2.2: DONTNEED, 2.3: REQUIRED, 2.4: DONTNEED to 2.2: DONTNEED, 2.3: DONE, 2.4: DONTNEED r57971の単純なバックポートでいければよかったんですが、世の中はそんなに甘くありませんでした :-P ---------------------------------------- Bug #13766: Ruby 2.3.4 build problem with "-fstack-check" https://bugs.ruby-lang.org/issues/13766#change-66091 * Author: taca (Takahiro Kambe) * Status: Closed * Priority: Normal * Assignee: usa (Usaku NAKAMURA) * Target version: * ruby -v: ruby 2.3.4p301 (2017-03-30 revision 58214) [x86_64-netbsd] * Backport: 2.2: DONTNEED, 2.3: DONE, 2.4: DONTNEED ---------------------------------------- pkgsrcで PKGSRC_USE_STACK_CHECK を yes に設定すると Ruby 2.3.4 のビルドに失敗します。 現象としては、tool/generic_erb.rb で encdb.h を生成する際に erb.rb でエラーとなります。 ~~~ lib/erb.rb:654:in `block in compile': can't modify frozen String (RuntimeError) ~~~ 調べたところ、作成した miniruby は frozen_string_literal のmagic commentがあると、それで設定した値に 関わらず true に設定したことになってしまっています。PKGSRC_USE_STACK_CHECK を設定したことによる gccの-fstack-chceckオプションの有無で挙動が変わります。 原因は compile.c でif文のブロック内で定義した自動変数のアドレスを、ブロックを抜けた後で参照している ためです。 幸い、 r57971 で加えた修正で一緒にこの問題は直してしまっているので、Ruby 2.4では問題はありません。 また、Ruby 2.3より前ではfrozen_string_literalのmagic commentはサポートされていないので問題は起きま せん。 pkgsrcでは次の修正で解決しました: http://mail-index.netbsd.org/pkgsrc-changes/2017/07/24/msg160523.html -- https://bugs.ruby-lang.org/