FlakyIterators
1.0.0
非決定的な反復を検出する高速で汚れたチェッカー
std::unordered_map<...> map;
for (auto [k, v] : map) {
...
}
std::map<Something *, ...> map;
for (auto [k, v] : map) {
...
}
警告は、定義された名前( printfなど)を持つ関数がループで遭遇した場合にのみ報告されます。
CSAのポインターリテーションは、ポインターの秩序化された容器や非詩人の順序のない容器よりも非決定的な反復を報告しません。
ビルド、インストール(Debian/Ubuntuに) llvm 、 libclang-dev 、 libpcre3-dev :
$ sudo apt-get install llvm libclang-dev libpcre3-dev
そして実行します
$ make clean all
デバッグまたはサニタイズされたバージョンを構築するには、 DEBUG=1 、 ASAN=1 、またはUBSAN=1でmakeされます。
興味のあるファイルでbin/find-flaky実行してください。
$ bin/find-flaky tests/3-unordered-map-notok.cc
find-flaky: warning: calling IO function 'printf' inside flaky loop
デフォルトでは、ツールが最も一般的なIO関数( printfなど)を探しますが、独自のパターンを提供します。
$ cat patterns.txt
# A useful comment
my_debug_fun
# Another one
other_fun
$ bin/find-flaky --patterns patterns.txt ...
カスタムコンパイルフラグ(通常-Dおよび-I )には、 --cflagsパラメーターを付与でき、Verbosityは-vフラグで設定できます。追加オプションの場合bin/find-flaky -hを実行します。
構築してから実行します
$ make test
Found no errors