[ruby-core:82160] [Ruby trunk Bug#13764] Ruby 2.3.4 build problem with "-fstack-check"

From: taca@...
Date: 2017-07-25 03:53:52 UTC
List: ruby-core #82160
Issue #13764 has been updated by taca (Takahiro Kambe).


Please close this Issue since I posted to wrong language and I re-posted as Bug #13766.

----------------------------------------
Bug #13764: Ruby 2.3.4 build problem with "-fstack-check"
https://bugs.ruby-lang.org/issues/13764#change-65914

* Author: taca (Takahiro Kambe)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.3.4p301 (2017-03-30 revision 58214) [x86_64-netbsd]
* Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN
----------------------------------------
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/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next