きりかノート 3冊め

おあそびプログラミング

先日のboehmgcの問題がXcodeのclangのせいじゃないかというギワク

boehmgcがMoutain Lionで落ちる件だけど、そういえばLion(Xcode 4.3?)では起きてないんだよね。修正内容自体もなんか納得しがたいものだし。ということで、boehmgcのupstreamにパッチ送る前に、いちおうMacPortsのclangでも検証しておこう。Xcodeじゃないclang-3.1でも起きるなら、FreeBSDとかでも再現するだろうし、意味がある修正になるでしょ。

検証の手順

MacPortsにtestが指示されてるのでそれを利用する。

   % port cat boehmgc | cat -n | sed -n 43,46p
       43
       44  test.run        yes
       45  test.target     check
       46

`port test'でmake checkが走るようになっている。詳しくはMacPorts Guideの"5.3.9. Test Phase Keywords"あたりを参照のこと。

実際の手順はこんな感じ。

   % svn co ... # svnからboehmgcのportを取ってきてパッチ前のバージョンに。sources.confに追加。
   % port file boehmgc # 今回用意したファイルになっていることを確認
   % port info boehmgc # パッチ前の7.2cになっていることを確認
   boehmgc @7.2c (devel)
     :
   % sudo port clean boehmgc # とりあえずclean
   % sudo port -v test boehmgc configure.compiler=macports-clang-3.0 # コンパイラを指定してtest
     :
   /usr/bin/make  check-TESTS
   Switched to incremental mode
   Emulating dirty bits with mprotect/signals
     :
   Starting iteration 10
   The test appears to have succeeded.
   PASS: test_cpp
   ===================
   All 11 tests passed
   ===================
   %

cleanしてtestをそれぞれのコンパイラについて実施する。

検証の結果

さて結果です。

10.8 Mountain Lion

バージョン バージョン詳細 結果
Xcode 4.4.1 Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn) 7 of 11 tests failed
clang-3.0 clang version 3.0 (tags/RELEASE_30/final) All 11 tests passed
clang-3.1(*1) clang version 3.1 (branches/release_31) All 11 tests passed

(*1)clangは後述のパッチを適用済み

10.7.4 Lion

バージョン バージョン詳細 結果
Xcode 4.4 Apple clang version 4.0 (tags/Apple/clang-421.0.57) (based on LLVM 3.1svn) 7 of 11 tests failed
Xcode 4.4.1 Apple clang version 4.0 (tags/Apple/clang-421.0.60) (based on LLVM 3.1svn) 7 of 11 tests failed
clang-3.0 clang version 3.0 (tags/RELEASE_30/final) All 11 tests passed
clang-3.1 clang version 3.1 (branches/release_31) All 11 tests passed

あらら、Lionもだめじゃん。Xcode-4.4だとアウトか。

clang-3.1は大丈夫みたいだから、Apple版だけの問題かもしんないね。どうしよう…