ruby-trunk-changes 2019-08-09

今日は clone した Module/Class の配下の定数参照が inline cache で誤ってヒットしてしまって間違った値を参照してしまう可能性がある不具合の修正などがありました。

[b1594ca3d6] Takashi Kokubun 2019-08-08 11:37:12 UTC

fa29f65416f1fb3d734a279855728bb0616dbb34 でデバッグのために V=1 --debug を追加した appveyor.yml の msys2 のビルドですが -j オプションによる並列化もデバッグのために削除してみています。

[3d87b774c4] Nobuyoshi Nakada 2019-08-08 12:08:00 UTC

load.c の rb_load_internal0() で rb_execution_context_t にアクセスするのに th->ec を使ってましたがローカル変数に代入してるのでその変数のほうを使うようにしています。

[76bd0714cf] Nobuyoshi Nakada 2019-08-08 12:26:31 UTC

b004d3e8300ba803d4a499148fa4fc6a690149e6 の load したスクリプト内での捕捉されない例外で TracePoint の :raise イベントが重複して発火するという不具合の修正ですが、require で同様の問題が修正されてないままだったようなので追加修正しています。 コミットメッセージのチケット番号は違うやつみたいです。たぶんこっちが正解。 [ruby-core:92880] [Bug #15885]

[2a6d7fad13] Takashi Kokubun 2019-08-08 13:03:00 UTC

appveyor.yml で pacman でインストールしているパッケージの不要なものを消したり順番を移動したりしています。 ビルド失敗の回避のためとのこと。

[995c2e9536] Nobuyoshi Nakada 2019-08-08 13:17:22 UTC

b004d3e8300ba803d4a499148fa4fc6a690149e6 および 76bd0714cf1140ffd64bf564446c76c54f2c4870 の追加修正。 rb_load_internal0() から処理を切り出して load_iseq_eval() という関数を作って rb_require_internal() から rb_load_internal() のかわりにこれを呼び出すようにして、require の時にネストした EXEC_TAG() の処理がされるのを避けるようにしています。

[a9b9f9d157] Takashi Kokubun 2019-08-08 13:35:11 UTC

fa29f65416f1fb3d734a279855728bb0616dbb34 および b1594ca3d6b72edb60927418482652ce93209499 の appveyor.yml のデバッグ用の変更を revert して V=1 の追加のみ残しています。

[a206738762] Nobuyoshi Nakada 2019-08-08 13:40:09 UTC

make update-deps で作成される一時ディレクトリの削除コマンドを追加しています。

[ad3f7a3667] Nobuyoshi Nakada 2019-08-08 15:06:08 UTC

require_internal() で rb_thread_t の top_wrapper と top_self というメンバーを退避しておいて top_wrapper を 0 にリセットしてから実際の require 処理して最後に復帰させるようにしています。 th->top_wrapper ってなんだろ。記憶にないなぁ。

[c0f4943840] git 2019-08-08 15:16:24 UTC

version.h の日付更新

[830fd04181] Nobuyoshi Nakada 2019-08-08 16:27:52 UTC

compile.c の enum の宣言の最後の要素の後にカンマを追加しています。 C99 に移行したのでこれが許されるようになったので。

[050b932152] Alan Wu 2019-08-08 02:15:45 UTC

RubyVM::InstructionSequence#to_binary に pattern match で使う例外クラスの対応が入ってなくて SEGV する恐れがあったのを修正しています。 https://github.com/ruby/ruby/pull/2325 [ruby-core:94201] [Bug #16088]

[57288f5dbd] git 2019-08-08 16:32:30 UTC

830fd0418170843f234ed82e07d2fd61d86153e7 のインデントのタブを空白に展開。

[c7acb37248] Aaron Patterson 2019-08-08 18:29:15 UTC

GitHub Actions を有効にするために .github/workflows/workflow.yml という空ファイルを追加しています。

[71efad1ed3] Koichi Sasada 2019-08-09 02:00:34 UTC

Module/Class が dup で複製されると、その配下の定数の参照が inline cache で共有されてしまい、誤った定数を参照してしまうことがある不具合の対策として RCLASS_CLONED という bit flag を追加して vm_get_const_key_cref() で cref の親のどこかにこのフラグが立ってたら ic->ic_cref にセットしておくようにしています。特異クラスの時の特別扱いと同じ処理を使って誤った inline cache 利用を抑制するようにしています。 [ruby-core:92849] [Bug #15877]

[4e9382a827] git 2019-08-09 02:11:18 UTC

71efad1ed391ee0c5398a76306fdbaaadd4dc52e のインデントのタブを空白に展開。

[0176e74d6c] Takashi Kokubun 2019-08-09 02:39:20 UTC

common.mk の class.o から gc.h への依存関係が足りてなかったので追加しています。 d0ef5c21fb91f7a82910fc71d4d8e1a801266232 で追加した Travis-CI で update-deps 実行してみて追加漏れを検出するやつで検出されたみたいです。

[a9fd57056c] Koichi Sasada 2019-08-09 04:02:31 UTC

拡張ライブラリ ripper のテストで使用メモリ制限つきで実行するところで MJIT 有効化時には 1.5 倍にしていたのを 2倍にまで増やすようにしています。

[37eefb11fb] Koichi Sasada 2019-08-09 04:08:01 UTC

0176e74d6c3de4a71424d9bc0bc63c408550b488 で class.o から gc.h への依存関係を追加してましたが、そもそも #include "gc.h" 自体が不要だったみたいで削除しています。

[54bdfe27f3] Aaron Patterson 2019-08-08 15:28:49 UTC

.github/workflows/workflow.yml に Pull Request に対する macOS 上でのテスト実施のジョブ定義を追加しているようです。

[cb390e87dc] Aaron Patterson 2019-08-08 20:29:02 UTC

54bdfe27f361c0cccb9d16f32e5796b47d017134 に追加して GitHub Actions で make test-spec と make leaked-globals (ってこのターゲットなんだっけ?)の実行もするようにしています。 https://github.com/ruby/ruby/pull/2327

[6bf8db9a07] Koichi Sasada 2019-08-09 04:57:47 UTC

gc.h で宣言されていた rb_obj_info_dump() および vm_debug.h で宣言されていた ruby_debug_breakpoint() とその別名であるマクロ bp() の宣言を interna.h に移動して gc.h の #include を減らしています。また rb_obj_info_dump() の wrapper である rp() というオブジェクトを表示するデバッグ用のマクロを追加しています。

[3b39cc6b03] Koichi Sasada 2019-08-09 05:11:24 UTC

6bf8db9a07e95820705f7ec119f4038a529182ef で thread.c から #include "gc.h" を削除したのは消しすぎだったので戻しています。

[26cf4c91ad] Koichi Sasada 2019-08-09 06:23:35 UTC

Fiber のテストで使う invoke_rec というユーティリティメソッドで EnvUtil.invoke_ruby に渡すタイムアウト値を大幅に(6時間に)伸ばしています。 macOS でのデバッグ用とのこと。

[3cbd56d574] Koichi Sasada 2019-08-09 07:08:15 UTC

make test-all に変数 TESTS でテストファイルを指定した時の補完処理に test_ という prefix がなかったら補完して探すという機能も追加しています。つまり test_pp.rb を指定するのに TESTS=pp.rb でもいいってことですね。

[a4a2dd7942] Kazuhiro NISHIYAMA 2019-08-09 07:29:43 UTC

a6e32855d079e8f3806d8be8a5f5cf7b3a967133 の標準添付ライブラリ reline のクオートにマッチさせる正規表現マッチの省略で開きクオート文字の参照を取り出すのに $& のかわりに $~ を使うように変更して MatchedData を保存してしまってたので戻しています。

[ef64ab917e] Yusuke Endoh 2019-08-09 08:31:19 UTC

gc.c の STACKFRAME_FOR_CALL_CFUNC という定数を 838 から 1024 に増やしています。 去年も r59676 で 512 から増やしてるので徐々に増えてってるみたいですね。 macOS の Mojave で Fiber のテストが止まらなくなる現象が置きるのを回避するためみたいです。てことは安定版にも入れたほうがいいのかなーと思ったけど RubyCI をみるとまた Mojave で別のエラーで失敗しているみたいですね。

[63384591e2] Koichi Sasada 2019-08-09 08:48:47 UTC

26cf4c91ad357fe6c8fc2247abe980dbf9a5b331 を revert して 6時間まで伸ばしたテストのタイムアウトを戻しています。なるほどたぶんこのタイムアウト延長でどこで止まってるか調査してたんですねきっと。