ruby-trunk-changes 2020-04-09

今日は昨日の include/ruby/ruby.h の分割にまつわる Intel C Compiler や Sun C Compiler 対応などがありました。

[ec1b3464da] 卜部昌平 2020-04-08 13:27:50 UTC

昨日の 9e6e39c3512f7a962c44dc3729c98a0f8be90341 での include/ruby/ruby.h の分割後に icc のビルドが失敗したのは defined(__has_builtin) が偽になると思ったら存在してたので明示的に Intel Compiler の時は除外するようにしています。icc に __has_builtin() が追加されたものの期待したような動きをしてくれないということみたいです。

[dd04b8034b] 卜部昌平 2020-04-08 13:32:02 UTC

9e6e39c3512f7a962c44dc3729c98a0f8be90341 で追加した RUBY3_CAST() というマクロを RARRAY_EMBED_LEN() や RSTRING_EMBED_LEN() で利用するようにしています。 C++ での警告抑制のためみたいです。

[e7128aa772] Nobuyoshi Nakada 2020-04-08 13:37:45 UTC

random.c でマクロ RUBY_UNTYPED_DATA_WARNING が未定義の時に 0 に定義しておくようにしています。Data_Wrap_Struct() に必要だったらしい。これも include/ruby/ruby.h の分割の影響?

[78eec3cdc5] Yusuke Endoh 2020-04-08 22:37:53 UTC

include/ruby/3/memory.h および include/ruby/3/core/rtypeddata.h で到達しない位置の return 文のかわりにする RUBY3_UNREACHABLE_RETURN() というマクロを使ってたところが Sun C Compiler で警告が出るそうなので defined(__sun) で分岐して省略させるようにしています。ヘッダ分割の時にけっこうこういうマクロがいろいろ導入されてたようですね。

[a4021ecd77] git 2020-04-08 22:44:47 UTC

version.h の日付更新

[8ab4c55e7a] Yusuke Endoh 2020-04-08 23:19:00 UTC

78eec3cdc5ff0664b421e041f4f70a814542b914 の Sun C Compiler 向けの RUBY3_UNREACHABLE_RETURN() を削るのを Intel C Compiler 向けにも同じ対応を追加しています。こちらでも警告がでてビルド失敗してたようです。

[cdd613b299] Yusuke Endoh 2020-04-08 23:55:46 UTC

configure で Solaris 上で Sun OpenStudio を利用している時には C++ コンパイラは利用不可とするようにしています。 C++ 用ヘッダがうまく扱かえなかったらしい。

[1a4f33e84e] Yusuke Endoh 2020-04-09 00:14:02 UTC

numeric.c の fix_pow() で b が負の時には上のほうで goto でジャンプしているので絶対に通らない分岐があったのを削っています。 Coverity Scan によって指摘されたとのこと。

[9af3469b84] Yusuke Endoh 2020-04-09 00:38:57 UTC

internal/bits.h の MUL_OVERFLOW_FIXNUM_P() でインラインで定義する構造体の変数の初期化を追加しています。未初期化変数アクセスの警告除去。

[f099bb040c] Nobuyoshi Nakada 2020-04-09 00:24:07 UTC

拡張ライブラリ etc で struct passwd::pw_expire の型が macOS では time_t の上位ビットにゴミが入るらしく(ひどい) TIMET2NUM() で変換するとおかしな値になるので macOS では int に明示的にキャストして INT2NUM() を利用するようにしています。

[97f73bd0e2] Nobuyoshi Nakada 2020-04-09 03:23:15 UTC

f099bb040c26708ecdb4f5e552843717caaba70b で PW_EXPIRE2VAL() というマクロを導入して対応したのを PW_TIME2VAL() に変更して struct passwd::pw_change というメンバーでも同様の問題が起きてたのを修正しています。

[d2bb2e066b] Yusuke Endoh 2020-04-09 03:50:15 UTC

8ab4c55e7a70f5a5bd041d93f425eeef4a47c01e でなぜか Intel C Compiler でも RUBY3_UNREACHABLE_RETURN() が警告になってたところを削るようにしてましたが、これは NULL を使ってたせいで C++ で NULL を使うのがよくなかったとのことで一部 revert して return する値を 0 に置き換えています。もう一箇所は 0 なのにだめだったのかな。

[fd0222caed] Koichi Sasada 2020-04-08 19:45:49 UTC

r38225 で導入した rb_uninterruptible() という関数(Kernel#p の実行中に複数の引数の表示のあいだ割り込みを pending させるために追加されたもの)で処理の終了後に RUBY_VM_CHECK_INTS() で割り込みチェックするポイントを追加しています。 inspect の実行などに時間がかかるようにした時にメインスレッドの終了による VM 全体の終了の割り込みが効かないことがあったそうです。

[b965e7e05e] Yusuke Endoh 2020-04-09 05:24:23 UTC

d2bb2e066b5a914283dd3ea473fc1762183af013 の icc で RUBY3_UNREACHABLE_RETURN() に NULL のかわりに 0 を渡すようにしたのはやっぱりうまくいかなかったみたいで revert しています。

[7a26021d1d] Hiroshi SHIBATA 2020-04-09 07:34:25 UTC

tool/sync_default_gems.rb のサブコマンド up で追加の引数で更新する default gem 名の指定を受け付けるようにしています。

[55a5a4bc03] Hiroshi SHIBATA 2020-04-09 09:23:49 UTC

tool/sync_default_gems.rb で default gems 更新のため gem のほうのリポジトリで remote に ruby 本体のリポジトリが既に追加されているけど対応するブランチがまだ作られていない時にも対応するようにしています。