clang++のboost対応状況 part.3
boost::foreach などboost::addressof が通らないのが原因なエラーがいくつかあるようだ.
http://d.hatena.ne.jp/gamaguchi/20100211/p2
と書いたけど,どうやら解決されたらしい.しかし,未だこのパッチがコミットされていないところを見ると何らかの問題があるのかもしれない.
まあそれはそれとして,最新のr96216にこの修正を手パッチしてビルドしてまた同様のテストをすることに.
今後も頻繁に同じことをする気がしたので,Boost本のサンプルのコンパイルと,コンパイル結果の比較はスクリプトにしておく.
build.zsh
#!/bin/zsh for name in BoostBook2nd/*/*.cpp(:r); do ${CXX} -c ${name}.cpp -o ${name}.$1.o; done
diff.zsh
#!/bin/zsh diff -U 255 <(ls BoostBook2nd/*/*.$1.o | sed 's/\..*//') \ <(ls BoostBook2nd/*/*.$2.o | sed 's/\..*//')
これらのスクリプトを使って,前回と同じgcc 4.4.3のコンパイル結果と比較した.
CXX=~/llvm/Release/bin/clang++ ./build.zsh clang++-0215 ./diff.zsh g++ clang++-0215
その結果
BoostBook2nd/1-String/format1 BoostBook2nd/1-String/format2 BoostBook2nd/1-String/format3 BoostBook2nd/1-String/format4 BoostBook2nd/1-String/lexcast1 BoostBook2nd/1-String/lexcast2 BoostBook2nd/1-String/regex1 BoostBook2nd/1-String/regex2 BoostBook2nd/1-String/regex3 BoostBook2nd/1-String/regex4 +BoostBook2nd/1-String/regex5 BoostBook2nd/1-String/string_algo1 BoostBook2nd/1-String/string_algo2 BoostBook2nd/1-String/string_algo3 BoostBook2nd/1-String/string_algo4 BoostBook2nd/1-String/string_algo5 BoostBook2nd/1-String/tokenizer1 BoostBook2nd/1-String/tokenizer2 BoostBook2nd/1-String/tokenizer3 -BoostBook2nd/1-String/xpressive1 -BoostBook2nd/1-String/xpressive2 -BoostBook2nd/1-String/xpressive3 -BoostBook2nd/1-String/xpressive4 -BoostBook2nd/1-String/xpressive6 -BoostBook2nd/1-String/xpressive7 -BoostBook2nd/1-String/xpressive8 -BoostBook2nd/1-String/xpressive9 -BoostBook2nd/10-Misc/graph1 BoostBook2nd/10-Misc/param BoostBook2nd/10-Misc/po BoostBook2nd/10-Misc/signals1 BoostBook2nd/10-Misc/signals2 -BoostBook2nd/10-Misc/ublas1 -BoostBook2nd/10-Misc/wave BoostBook2nd/2-SmartP/shared_ptr1 BoostBook2nd/2-SmartP/weak_ptr1 BoostBook2nd/3-System/filesystem1 BoostBook2nd/3-System/fsls BoostBook2nd/3-System/fsmv BoostBook2nd/3-System/gregorian1 BoostBook2nd/3-System/gregorian_calender -BoostBook2nd/3-System/posix_time1 -BoostBook2nd/3-System/posix_time2 BoostBook2nd/3-System/thread1 BoostBook2nd/4-IO/add_server BoostBook2nd/4-IO/addmul_server2 BoostBook2nd/4-IO/addmul_server3 BoostBook2nd/4-IO/asio1 BoostBook2nd/4-IO/asio2 BoostBook2nd/4-IO/asio3 BoostBook2nd/4-IO/gzview BoostBook2nd/4-IO/iostreams1 BoostBook2nd/4-IO/iostreams2 BoostBook2nd/4-IO/iostreams3 BoostBook2nd/4-IO/iostreams4 BoostBook2nd/4-IO/serialization1 BoostBook2nd/4-IO/serialization2 BoostBook2nd/4-IO/serialization4 BoostBook2nd/5-Math/crc1 BoostBook2nd/5-Math/crcchk BoostBook2nd/5-Math/interval1 BoostBook2nd/5-Math/interval2 BoostBook2nd/5-Math/quaternion1 BoostBook2nd/5-Math/quaternion2 BoostBook2nd/5-Math/random1 -BoostBook2nd/5-Math/random2 -BoostBook2nd/5-Math/random3 BoostBook2nd/5-Math/rational1 BoostBook2nd/6-Data/any1 BoostBook2nd/6-Data/any2 BoostBook2nd/6-Data/array1 BoostBook2nd/6-Data/array2 BoostBook2nd/6-Data/dynbitset1 BoostBook2nd/6-Data/dynbitset2 BoostBook2nd/6-Data/ite_adapt1 BoostBook2nd/6-Data/ite_facade1 BoostBook2nd/6-Data/multi_array1 BoostBook2nd/6-Data/multi_array2 BoostBook2nd/6-Data/multi_array3 -BoostBook2nd/6-Data/optional1 BoostBook2nd/6-Data/range1 BoostBook2nd/6-Data/range2 BoostBook2nd/6-Data/tuple1 BoostBook2nd/6-Data/tuple2 BoostBook2nd/6-Data/variant1 BoostBook2nd/6-Data/variant2 BoostBook2nd/6-Data/variant3 BoostBook2nd/6-Data/variant4 BoostBook2nd/7-Func/bind1 BoostBook2nd/7-Func/bind2 BoostBook2nd/7-Func/bind3 BoostBook2nd/7-Func/bind4 -BoostBook2nd/7-Func/function1 -BoostBook2nd/7-Func/lambda1 -BoostBook2nd/7-Func/spirit1 -BoostBook2nd/7-Func/spirit10 -BoostBook2nd/7-Func/spirit2 -BoostBook2nd/7-Func/spirit3 -BoostBook2nd/7-Func/spirit5 -BoostBook2nd/7-Func/spirit6 -BoostBook2nd/7-Func/spirit7 -BoostBook2nd/7-Func/spirit8 -BoostBook2nd/7-Func/spirit9 BoostBook2nd/8-Meta/fusion2 BoostBook2nd/8-Meta/fusion3 BoostBook2nd/8-Meta/fusion4 BoostBook2nd/8-Meta/mpl1 BoostBook2nd/8-Meta/mpl2 BoostBook2nd/8-Meta/mpl3 BoostBook2nd/8-Meta/mpl4-5 BoostBook2nd/8-Meta/mplaf BoostBook2nd/8-Meta/pp3 BoostBook2nd/8-Meta/pp4 BoostBook2nd/8-Meta/type_traits1 BoostBook2nd/9-Util/assignment1 BoostBook2nd/9-Util/foreach1 BoostBook2nd/9-Util/ios_saver1 BoostBook2nd/9-Util/next1 BoostBook2nd/9-Util/operators1 BoostBook2nd/9-Util/ref1 BoostBook2nd/9-Util/timer1
前回の結果と比較すると,
BoostBook2nd/6-Data/variant2 BoostBook2nd/6-Data/variant3 BoostBook2nd/8-Meta/fusion2 BoostBook2nd/8-Meta/fusion3 BoostBook2nd/8-Meta/fusion4 BoostBook2nd/9-Util/foreach1
が通るようになっただけでなく,気が付けばBOOST_SP_NO_ATOMIC_ACCESSを有効にしなくてもshared_ptrがコンパイルできるようになっている.ClangのC++対応度を高めるためにLLVM 2.7のリリースを遅らせよう,っていう流れになっているのも納得できる速度で成長してるなあ.
ところで,C++の対応度をチェックするのに最適なテストってのは何なんだろう?
BoostのRegression Testは巨大すぎるのと,bjamでclangを使う方法がよくわからんのがなあ.単にg++と差し替えるだけだと-dumpmachineってオプションが無いって言われて失敗する.