Cコードを破壊的に削っていくプログラムなのですが、コンパイラのバグが出たコードを、問題の箇所だけに削るのに便利なプログラムです。
案に違わず、なんでこれまで使ってなかったんだ、俺の馬鹿馬鹿!みたいな結果でした。まずは分かりやすく結果から。
$ ls -l test.cc
-rw-r--r-- 1 jam jam 13892 Dec 27 09:02 test.cc
$ creduce test.sh test.cc
...
#include "re.h"
namespace benchmark {
void a(std::string b) {
std::string d;
Regex c;
c.Init(b, &d);
}
} // namespace benchmark
え、そんだけ!?!?そんなに削ってくれるの!?
関数単位で削ってくれるだけかな?とか思ってたんですが、関数内のコードもガンガン削って、変数名なども適当に付け替えてくれて、超有能です!!
作るテストスクリプトは以下みたいな感じ。検出したい、エラーが出るパターンに!を付けます。!パターンだけだと、削り過ぎてsyntax errorが出るようになった時にcompile errorとsyntax errorが区別できなくなるので、コンパイルできて(syntax errorじゃなくて)、かつ最適化するとエラーになる物を検出としています。
$ cat test.sh
#!/bin/bash
clang -O3 -fno-vectorize ... &&\
! clang -O3 -fvectorize ...
いやあ、超便利!有能!なんで俺はこれまで使ってこなかったんだ・・・!!
0 件のコメント:
コメントを投稿