ruby-trunk-changes r64025 - r64038

今日は標準添付ライブラリ time.rb の機能追加や MJIT worker の不具合修正などがありました。

nobu: r64025 2018-07-24 14:38:07 +0900

処理が戻ってこない関数などを呼んだ後の警告を除去するための UNREACHABLE というマクロが使えない場合のために return 文を書く UNREACHABLE_RETURN というマクロを追加して、各所でこれを使うように変更しています。

svn: r64026 2018-07-24 14:38:09 +0900

version.h の日付更新。

nobu: r64027 2018-07-24 15:03:02 +0900

common.mk の exe/ruby のルールで POSTLINK で実行する dsymutil のためにオブジェクトファイルが必要だったそうで、コンパイルを一旦オブジェクトファイルを作ってそれをリンクするように2段階に変更しています。

nobu: r64028 2018-07-24 16:47:01 +0900

標準添付ライブラリ time.rb の Time.make_time で第3引数に yday (通年の日付け?)を追加しています。 positional argument の途中に追加しているので互換性がなくなりますが、これは private method で内部でしか使ってないから大丈夫ってことですかね。 [ruby-core:87545] [Bug #14860]

kazu: r64029 2018-07-24 18:15:58 +0900

r63963 で戻り値無視の警告除去のため write(2) の (void) へのキャストを追加していましたが、これでもまだ警告が出るようなので ! も追加しています。うーん、コンパイラによる最適化とのいたちごっこですね。

k0kubun: r64030 2018-07-24 20:54:15 +0900

test/ruby/test_jit.rb の未使用変数の除去のため特別な変数 _ で受けるようにしています。

nobu: r64031 2018-07-24 21:12:59 +0900

vm.c に #define vm_call0 rb_vm_call0 のように rb_ つきの関数名に変更するマクロがいくつか追加されています。うーんこれはどういうことだろ。

k0kubun: r64032 2018-07-24 21:19:47 +0900

r63037 あたりで MJIT のテストで gcc の cc1 というコマンドが CI でエラーを出すことがあってデバッグ用の出力を追加したりしていましたが、一旦諦めてテストで 3回までリトライするようにしています。

k0kubun: r64033 2018-07-24 23:36:10 +0900

MJIT の worker で動く関数の中で xmalloc() や ALLOC_N() や REALLOC_N() などのメモリ確保の関数/マクロを利用していて、これらはメモリが不足してた時に GC を実行開始してしまうのでこれを避けるために直接 malloc(3) や realloc(3) を呼ぶように修正しています。

k0kubun: r64034 2018-07-24 23:43:40 +0900

r64031 の変更で MJIT でコンパイルしないように除外したい関数名の vm_search_method_slowpath() が rb_vm_search_method_slowpath() に変更されてしまっていたので tool/transform_mjit_header.rb でそれに追随させています。なるほどー、こんなこともしているのか。

k0kubun: r64035 2018-07-25 00:17:08 +0900

r64031 でマクロ定義することで関数名変更を吸収してたのを、各呼び元で直接変更するようにしています。

svn: r64036 2018-07-25 00:17:09 +0900

version.h の日付更新。

k0kubun: r64037 2018-07-25 00:40:05 +0900

r64033 で MJIT worker では malloc(3)/realloc(3) を直接呼ぶようにしたところでエラー処理がされていなかったのを修正しています。

naruse: r64038 2018-07-25 05:24:27 +0900

r63982 で DT_UNKNOWN がない環境(具体的には Solaris) での Dir.glob の実装を修正していましたが、これが Solaris 11 でビルドエラーになるらしくて revert しています。