ruby-trunk-changes 2021-05-05

今日は主にビルド時のコンパイラオプションに -Werror=undef を追加して未定義警告のエラー化を行ない、それに伴なうビルドエラーの修正をする変更がありました。

[8b32de2ec9] Benoit Daloze 2021-04-29 12:14:52 UTC

configure でコンパイラオプションに加える警告関連のオプションに -Werror=undef を追加候補にするようにしています。未定義のシンボルの警告をエラー扱いにするというものですね。これ以降このオプション追加によるコンパイルエラー対応が続きます。 [ruby-core:103040] [Feature #17752]

[9e2483ee0b] Benoit Daloze 2021-04-29 11:15:19 UTC

8b32de2ec9b72d4c9ede19b70ec9497718fb25a6 の -Werror=undef 追加の対応で vm_dump.c で backtrace() という関数の有無のチェックを HAVE_BACKTRACE を直接いじらず USE_BACKTRACE というマクロを導入するようにリファクタリングしています。 [ruby-core:103040] [Feature #17752]

[229cbeba8c] Benoit Daloze 2021-04-29 12:29:57 UTC

coroutine/copy/Context.h および coroutine/ucontext/Context.h の未定義シンボルの警告対応。 stdint.h の include が必要だったみたいです。 [ruby-core:103040] [Feature #17752]

[68d6bd0873] Benoit Daloze 2021-04-29 12:31:05 UTC

同じく -Werror=undef 対応。あちこちの preprocessor による分岐の #if と #ifdef の誤用の修正や条件の追加修正など。 [ruby-core:103040] [Feature #17752]

[f1dcc3da5d] Benoit Daloze 2021-04-29 12:28:08 UTC

同じく -Werror=undef 対応。 include/ruby/internal/core/rbasic.h に RBIMPL_RVALUE_EMBED_LEN_MAX というマクロ定義を追加しています。コンパイラによって? enum の値が preprocessor で正しく評価されてないことがあったのが判明したみたいです。 [ruby-core:103040] [Feature #17752]

[59a92a84c8] Benoit Daloze 2021-04-29 13:02:19 UTC

拡張ライブラリ nkf と openssl でマクロを #if で使う時に定義済みかのチェックも追加するようにしています。これも -Werror=undef 対応みたいです。 [ruby-core:103040] [Feature #17752]

[fa7a712d46] Benoit Daloze 2021-04-29 13:03:46 UTC

拡張ライブラリで Ractor safe 宣言のために HAVE_RB_EXT_RACTOR_SAFE マクロを #if でチェックしてたのを #ifdef でチェックするように修正しています。 [ruby-core:103040] [Feature #17752]

[0764d323d8] Benoit Daloze 2021-04-29 13:12:44 UTC

同じく -Werror=undef 対応で HAVE_XXX マクロのチェックを #if にしてたのを #ifdef に修正しています。 [ruby-core:103040] [Feature #17752]

[f108bc32af] Benoit Daloze 2021-04-29 13:17:49 UTC

同じく HAVE_ATTRIBUTE_ERRORFUNC というマクロを #if でチェックしていたところを #ifdef でのチェックに修正。対応してない時に 0 に #define してるところがあったので削っています。これ削るよりは #undef にしたほうがいいのではないかな。 [ruby-core:103040] [Feature #17752]

[d09988502e] Benoit Daloze 2021-04-29 13:30:31 UTC

RBIMPL_HAS_BUILTIN___xxxx 系のマクロを未定義の時に明示的に 0 で定義しておくようにしています。HAVE_XXX とは違って逆にこっちは定義しておかないといけないみたいです。 [ruby-core:103040] [Feature #17752]

[3ca291c9ae] Peter Zhu 2021-05-04 13:37:02 UTC

Array の実装で配列のメモリ領域の capa を変更する時に transient heap を使っている場合には capa を小さくしようとした時に実際にはサイズ変更せず同じ領域を使い続けるようになっているのですが、その時 struct RArray の capa は小さい値に更新されるので、capa と実際のメモリ領域の上限が一致してない状態になって無駄になるので、ary_heap_realloc() という関数で調整後のサイズを返して、呼び元でその値を capa に設定しなおすようにして実際の領域サイズと一致するように保つようにしています。

[14c932e52d] git 2021-05-04 15:46:40 UTC

version.h の日付更新

[c809a8cae8] Jeremy Evans 2021-05-04 18:10:39 UTC

IO#ungetc や IO#ungetbyte の rdoc 用コメントに複数回呼ばれた時の挙動や引数に Integer を渡した時の扱いについて追記しています。 [ruby-core:85108] [Bug #14400]

[fd3a20348e] Burdette Lamar 2021-05-04 18:59:33 UTC

IO クラスの rdoc 用コメントに各メソッドについての短かい説明を追加しています。 https://github.com/ruby/ruby/pull/4440

[370949aad6] MSP-Greg 2021-05-04 15:31:19 UTC

標準添付ライブラリ net/ftp のテストで Errno::EPIPE を捕捉しているところが MinGW では Errno::ECONNRESET が発生することもあるとのことで rescue する例外クラスに追加しています。

[b57c7be6a9] Peter Zhu 2021-05-04 21:29:20 UTC

include/ruby/internal/fl_type.h で ENUM_OVER_INT をチェックしているところを #if から #ifdef に変更しています。 -Werror=undef 対応の続きですね。 [ruby-core:103040] [Feature #17752]

[45bcab3c84] Peter Zhu 2021-05-04 21:31:29 UTC

siphash.c で __LITTLE_ENDIAN と __BIG_ENDIAN というマクロが参照されているのが MinGW では未定義になってるらしく __MINGW32__ が定義されてる環境ではこれらのマクロを定義するようにしています。 [ruby-core:103040] [Feature #17752]

[3d2e7e2ab5] Peter Zhu 2021-05-04 21:33:30 UTC

FreeBSD でのビルドエラー対応として random.c での sys/param.h ヘッダファイルの include する条件に FreeBSD であることも追加しています。これも -Werror=undef で判明したエラーかな? [ruby-core:103040] [Feature #17752]

[46dd295a53] Peter Zhu 2021-05-04 23:57:24 UTC

thread_win32.c で USE_WIN32_MUTEX をチェックするのに #if を使ってたのを #ifdef を使うように修正しています。 [ruby-core:103040] [Feature #17752]

[44cff500a0] xtkoba 2021-05-04 22:45:23 UTC

win32/win32.c で _MSC_VER の範囲チェックする時に先に defined で定義されてることもチェックするようにしています。 [ruby-core:103040] [Feature #17752]

[5bde2e61db] Nobuyoshi Nakada 2021-05-05 00:41:07 UTC

configure で -Werror=undef を追加する時に古い GCC だと #if defined の後に続く #elif で定義されてるはずのマクロ参照をしても警告になるという不具合があるそうなので、その場合は -Wundef に留める(コンパイルエラーにはしない)ように緩めるようにしています。 [ruby-core:103040] [Feature #17752]

[e71c9ca529] Yusuke Endoh 2021-05-05 03:58:12 UTC

configure でコンパイラの組み込み関数 __builtin_expect の存在チェックを追加しています。これも -Werror=undef の対応のひとつで、明示的にチェックして HAVE_BUILTIN___BUILTIN_EXPECT マクロが定義されるようにしてあげないと ICC でのビルド時にコンパイルエラーになってたようです。 [ruby-core:103040] [Feature #17752]