今日は openssl の SSLv2 および SSLv3 の関数を利用しないマクロが定義されている時の関数検出の修正などがありました。
naruse: r54942 2016-05-08 09:55:28 +0900
警告をエラーにするコンパイラオプションに -Werror=implicit-int を追加しています。関数宣言で型を省略した時にエラーにするようにしています。
naruse: r54943 2016-05-08 09:55:28 +0900
さらにコンパイラオプションに -Wsuggest-attribute=noreturn というオプションを追加しています。関数に noreturn の attribute の指定を追加することを示唆するというものみたいで、これでみつけたと思われる関数に NORETURN() マクロを使うようにしています。
svn: r54944 2016-05-08 09:55:28 +0900
version.h の日付更新。
naruse: r54945 2016-05-08 09:55:29 +0900
さらに -Wsuggest-attribute=format というコンパイラオプションも追加されています。こっちは警告の抑制のためだそうですが、dump_append() の宣言に PRINTF_ARGS() を追加しているところをみると printf() 系のフォーマット文字列を受け付ける関数を検出してくれるようです。format 属性をつけるとフォーマット文字列(リテラル)に応じた可変長引数の数や型チェックが行なわれるのだと思います。
nobu: r54946 2016-05-08 12:21:28 +0900
r54943 で include/ruby/intern.h の rb_enable_super() と rb_disable_super() にも NORETURN() が付けられてましたが、これらの関数はなにもせず return するだけなので外しています。
nobu: r54947 2016-05-08 18:51:34 +0900
file.c の rb_home_dir_of() で getpwnam() が利用できない環境(Windowsなど)でユーザ名を明示的に渡した時に、たとえそのユーザ名が現在のユーザ名(省略した時のデフォルト)であっても例外を発生させていたのを、渡されたユーザ名が現在のユーザ名だったらデフォルトの時と同じ(環境変数 HOME から取得する)挙動をするようにしています。 [ruby-core:74616] [Bug #12226]
nobu: r54948 2016-05-08 18:59:36 +0900
拡張ライブラリ objspace の dump_append_string_content() と dump_object() で String や Hash のサイズを埋め込むのに %ld ではなく PRIdSIZE を利用するように修正しています。
nobu: r54949 2016-05-08 18:59:37 +0900
拡張ライブラリ win32ole でも ole_raise() の宣言に NORETURN() と PRINTF_ARGS() を追加しています。
naruse: r54950 2016-05-08 21:10:22 +0900
拡張ライブラリ openssl で OPENSSL_NO_SSL2 や OPENSSL_NO_SSL3_METHOD といったマクロ定義があったらライブラリにシンボルがあっても HAVE_SSLV2_ や HAVE_SSLV3_ ではじまるマクロ定義を消して関数がないものとして扱うようにしています。 OpenSSL では環境によってはヘッダには宣言がないけどライブラリにはシンボルが残ってるというケースがあるそうで、そのような時に関数をなしと判定するために(mkmf.rb ではリンクできるとあるとみなされてしまうので)明示的に削除しています。