ruby-trunk-changes r57612 - r57624

今日は gcc 7 向けの RB_GC_GUARD() の強化や警告除去、細かい最適化などがありました。

nobu: r57612 2017-02-13 08:37:28 +0900

defs/gmake.mk で make に -n オプションが指定されていた時に gnumake_recursive という変数に "+" を入れるのをやめています。これは r57514 で追加された変数で test-all などのターゲットのコマンドの先頭に + を入れるようになってます。これなんだろう。軽く調べたのですがわからなかった。コメントによるとこれで -n 指定時にはテストを実行しないようにしているそうです。

svn: r57613 2017-02-13 08:37:29 +0900

version.h の日付更新。

normal: r57614 2017-02-13 10:05:23 +0900

cont.c の cont_mark() と fiber_mark() で最初に引数のポインタの NULL チェックをして、NULL なら操作しないようにしていた分岐を削除しています。gc.c で dmark 関数を呼び出す前にチェックしているので不要なので。

normal: r57615 2017-02-13 11:04:26 +0900

array.c の ary_recycle_hash() で rb_gc_force_recycle() を呼び出して引数の hash を強制的に回収するようにしています。この hash は klass が 0 の内部的なオブジェクトなので外から見えないので安全に回収できるとのこと。

nobu: r57616 2017-02-13 14:11:14 +0900

defs/gmake.mk で TEST_TARGETS と TEST_DEPENDS を filter と filter-out を使ってなにかしてるんですけど、これはなんだろう…。コメントによるとテストを step by step に実行するようにしているとのこと。テストを含む複数のターゲットを同時に指定した時に重複を省いて指定の順序で実行するようにしているのかなあ。

nobu: r57617 2017-02-13 14:23:36 +0900

compile.c の iseq_build_kw() で ALLOC_N() の引数に明示的なキャストを追加して警告除去しています。 gcc 7 で警告が出るとのこと。

nobu: r57618 2017-02-13 14:44:15 +0900

string.c と thread.c で gcc の時に ASSUME() というマクロを使って未初期化変数の警告を抑制するようにしています。また do_select() の引数に const 修飾子を追加しています。

nobu: r57619 2017-02-13 17:14:19 +0900

RB_GC_GUARD() の定義に inline assembler で空の(コメントのみの)命令を書いて、入力オペランドにメモリ指定で rb_gc_guarded_ptr を書いておくようにしています。これでより rb_gc_guarded_ptr が最適化されにくくなるということですね。どうやら gcc 7 で最適化がより強くなったのに対応しているみたいです。

kazu: r57620 2017-02-13 21:16:26 +0900

標準添付ライブラリ find とそのテストの magic comment frozen_string_literal を true にしています。

nobu: r57621 2017-02-13 22:08:44 +0900

r57619 で RB_GC_GUARD() に追加した inline assembler でアセンブリとして書いたコメントは削除しています。 Solaris でうまくコンパイルできなかったみたいです。

nobu: r57622 2017-02-14 00:19:12 +0900

r57618 で thread.c に追加した ASSUME() の呼び出しですが GCC 4 以降で使うようにしていたのを 5 以降に修正しています。

svn: r57623 2017-02-14 00:19:13 +0900

version.h の日付更新。

nobu: r57624 2017-02-14 00:28:25 +0900

r57616 でテストを順に実行するようにした defs/gmake.mk の変更で test-ruby というターゲットが変数から漏れてたのを修正しています。