ruby-trunk-changes r33298 - r33303

今日は主に openssl のテストの修正と LLVM を利用したコンパイラ向けの修正がありました。

naruse:r33298 2011-09-20 03:30:23 +0900

openssl のテストで OpenSSL で TLS がサポートされるようになったバージョンのチェックをより正確にして、未サポートのバージョンでテストしようとするのを防いでいます。 [ruby-core:39617] [Bug #4961]

svn:r33299 2011-09-20 03:30:26 +0900

version.h の日付更新。

naruse:r33300 2011-09-20 10:23:33 +0900

r33294 で追加した openssl のテストで OpenSSL::SSL::SSLSocket を作成する為に開いた TCPSocket を close し忘れていたのを閉じるようにしています。

naruse:r33301 2011-09-20 16:18:37 +0900

OpenSSL::Cipher のテストで NetBSD では IDEA と RC5 のテストをスキップするようにしています。これらの暗号アルゴリズムは特許で保護されていて、NetBSD では /etc/mk.conf で明示的に利用可能にしないと、呼ぶと abort する実装の関数に差し替えられてしまうらしいので、クラスは存在するけど呼ぶとだめという状態になるそうです。

nobu:r33302 2011-09-20 18:09:00 +0900

クラス変数のアクセスの時に利用する vm_get_cvar_base() という関数で cref を辿るループの中で NULL チェックしている条件分岐はループを抜けた後で1度判定すれば済んでいたのでリファクタリングしています。また引数の cref に NULL が渡されることはないはずなので明示的にチェックして rb_bug() で落とすようにしています。

naruse:r33303 2011-09-20 21:16:08 +0900

LLVM をバックエンドとしたコンパイラ(clang, gcc-llvm?)で vm_call_cfunc() の引数 reg_cfp を GC から保護するために RB_LLVM_GUARD() というマクロ(RB_GC_GUARD() の別名)を定義して使うようにしています。この修正は r33112 で類似のものが入って、r33126 で一度 RB_GC_GUARD() が VALUE 用ということで revert されたものです。LLVM の最適化は volatile があっても利用されなくなった変数はレジスタ/スタックから消されるため RB_GC_GUARD() のような手法が必須のようです。 RB_LLVM_GUARD() で VALUE へのキャストでも入れればいいんでしょうかね。