ruby-trunk-changes r54734 - r54753

今日は昨日 vm_getivar() につける inline もしくは static inline という修飾子をマクロ化する変更についていろいろありました。また AIX のビルドエラーの修正がありました。

nagachika: r54734 2016-04-24 03:05:26 +0900

r54677 で tool/merger.rb で revision.tmp という一時ファイルが残ってたら消すようにしてましたが、残ってない時にエラーになっていたので FileUtils.rm_f でファイルが存在しなくても無視するようにしました。

svn: r54735 2016-04-24 03:05:27 +0900

version.h の日付更新。

naruse: r54737 2016-04-24 03:46:26 +0900

Windows 版で MSVC14 以降をサポートするため ioinfo という型の代替定義を自前で定義しておけるようにしています。 MSVC14 以降は _pioinfo が公開されなくなったので Windows 向けの IO の実装がビルドできなくなっていたそうです。 [ruby-core:69065] [Bug #11118] [ruby-core:73260] [Bug #12014] https://github.com/ruby/ruby/pull/884

naruse: r54738 2016-04-24 07:30:42 +0900

r54728 と r54729 で static inline vs inline で最適化の有無の両方で得たい結果が得られないので、INLINE というマクロ(は元々あったのですね)で __OPTIMIZE__ をチェックして最適化時には inline に、最適化が off の時には static inline に展開するようにして、vm_getivar() ではこれを使うようにしています。 また vm_setivar() はただの static だったのを static inline にしています。こっちに INLINE を使わなかったのはなぜだろう。inline をつけてないとパフォーマンスが悪くなるそうですが。
しかしどうも __OPTIMIZE__ は関係なかったみたいで後でここの条件が二転三転します。

yui-knk: r54739 2016-04-24 09:32:21 +0900

Array#sum のテストに配列の要素に数値以外のオブジェクトを入れてた時のテストケースを追加しています。 r54705 でドキュメントのサンプルに追加した内容をテストにも反映させてるんですね。

nobu: r54740 2016-04-24 10:10:29 +0900

r54737 で set_pioinfo_extra() に追加したコメントにコメント内に /* があって警告が出ていたそうなので削っています。

nobu: r54741 2016-04-24 11:10:09 +0900

regexec.c の match_at() 内の変数 oplabels に const 修飾子を追加しています。

nobu: r54742 2016-04-24 11:56:20 +0900

ruby.c の gcc 以外のコンパイラでの compile error の修正とのことですが、r54744 で revert されています。 r54720 が関係あるんですかねぇ。だとすると ruby_2_3 に backport しているので気になります。

nobu: r54743 2016-04-24 12:38:03 +0900

r54738 の INLINE マクロを inline に展開する条件を __OPTIMIZE__ ではなくて clang ではない gcc という条件に変更しています。 clang で挙動が違う? みたいなのですがこの部分は今日この後何度か修正が入ります。

nobu: r54744 2016-04-24 12:42:25 +0900

r54742 を revert しています。 Commit miss とのことですが compile error は問題ないんでしょうか。

ktsj: r54745 2016-04-24 18:37:04 +0900

r54738 の INLINE を inline に展開する条件に __NO_INLINE__ が定義されていないことを追加しています。 static inline になるのはいいのかな。

ktsj: r54746 2016-04-24 18:42:40 +0900

r54745 で追加した条件からまわりにあわせてかっこを削っています。

nobu: r54747 2016-04-24 21:01:00 +0900

INLINE の定義で r54743 で追加した __clang__ は削除しています。 __NO_INLINE__ が問題で clang かどうかは関係なかったみたいです。…と思ったらこれにはまだ続きがあります。というか __OPTIMIZE__ は関係なかったんですかね?

nobu: r54748 2016-04-24 21:01:47 +0900

verconf.h の依存関係に timestamp ファイルを利用するようにして不要な再生成を抑制するようにしています。

kazu: r54749 2016-04-24 22:41:38 +0900

r54727 と r54745 の ChangeLog エントリの typo修正。

odaira: r54750 2016-04-24 23:32:31 +0900

r54716 で AIX でシステムの round(3) を利用しないようにしたのを r54719 で configure.in 内での位置をプラットフォーム特有の設定を書く場所に移動したところ LIBS に -lm の追加が不足していてコンパイルエラーになったので、追加しています。なるほど configure.in の $target_os による分岐部分は最後の else 節に相当する部分に LIBS="-lm $LIBS" が存在しているから新規に分岐を追加する時には注意が必要なんですね。

naruse: r54751 2016-04-24 23:58:48 +0900

r54747 を revert しています。 やはり clang の 3.4 から 3.8 には不具合があり inline をつけた関数の symbol も link しようとして undefined reference to `vm_getivar' というエラーになってしまうそうです。 ただし Apple版(Xcode版) および FreeBSD版の clang は大丈夫とのこと。 [ruby-core:75159] [Bug #12316]

naruse: r54752 2016-04-25 00:08:25 +0900

r54748 の verconf.h の依存関係に timestamp ファイルを使う変更を revert しています。 CI でビルドエラーになっていたようです。

svn: r54753 2016-04-25 00:08:26 +0900

version.h の日付更新。