From: "ngoto (Naohisa Goto)" <ngotogenome@...> Date: 2012-12-19T23:26:53+09:00 Subject: [ruby-dev:46772] [ruby-trunk - Bug #7591][Open] SEGV on sparc Solaris10 when Marshal.dump Issue #7591 has been reported by ngoto (Naohisa Goto). ---------------------------------------- Bug #7591: SEGV on sparc Solaris10 when Marshal.dump https://bugs.ruby-lang.org/issues/7591 Author: ngoto (Naohisa Goto) Status: Open Priority: Normal Assignee: Category: Target version: ruby -v: ruby 2.0.0dev (2012-12-16) [sparc64-solaris2.10] sparc Solaris10 上にて、Oracle Solaris Studio 12.3 にてデフォルトの最適化オプションである -O (-xO4 相当)を付けて make すると、rdoc作成時に Marshal.dump 内にて SEGV が発生します。make test-all すると、 TestMarshal が Failure になります。 marshal.c の marshal_dump および marshal_load 関数にて、変数 wrapper が最適化のためスタックに乗らないようで、w_object などの呼び出した先の関数の中で走ったGCによって消されてしまい、SEGVに至るようです。関数の最後のほうにある RB_GC_GUARD(wrapper) は効果が無いようです。 添付のパッチのように修正すると治りました。 添付のパッチ適用後は、関数末尾の RB_GC_GUARD(wrapper) は無くても動くようですが、念のため残しています。 -- http://bugs.ruby-lang.org/