非常に単純な .c ファイルがあり、その中にいくつかの明らかなバグがあります。
#include <stdio.h>
struct S {
int x;
};
void f(struct S s){
}
void test() {
struct S s;
f(s); // warn
}
int test2(int x){
return 5/(x-x); // warn
}
int main(){
test();
test2(532);
printf("Hej\r\r");
}
エラーを検出するために、clang の静的コード アナライザー ツール (scan-build) を使用しようとしています。たとえば、次のコマンドを使用して、ファイルに対してツールを直接実行すると、次のようになります。
スキャンビルド g++ -o 1 1.c
0 による除算に言及するコンパイラからの警告を含め、意図した出力が得られます。
scan-build: 静的解析に「/usr/lib/llvm-3.8/bin/clang」を使用
1.c: 関数 'int test2(int)' 内: 1.c:16:11: 警告: ゼロ除算 [-Wdiv-by-zero] return 5/(xx); ^
1.c:16:11: 警告: 0 による除算は 5/(xx) を返します。
~^~~~~~ 1 件の警告が生成されました。scan-build: 1 件のバグが見つかりました。scan-build: 「scan-view /tmp/scan-build-2016-07-11-152043-3028-1」を実行して、バグ レポートを調べます。
今、私はそのコマンドを非常に単純な Makefile に入れようとしています。私の Makefile の内容は次のとおりです。
all: 1.c
g++ -o 1 1.c
clean:
rm -f *.o 1
ただし、次のコマンドを使用して、make で scan-build を実行するたびに:
スキャンビルドメイク
コンパイラからはまだ警告が表示されますが、スキャンビルド ツールからは表示されません!!!
scan-build: 静的解析に「/usr/lib/llvm-3.8/bin/clang」を使用
g++ -o 1 1.c
1.c: 関数 'int test2(int)' 内:
1.c:16:11: 警告: ゼロ除算 [-Wdiv-by-zero] return 5/(xx);
^ scan-build: レポートが含まれていないため、ディレクトリ '/tmp/scan-build-2016-07-11-152326-3055-1' を削除しています。scan-build: バグは見つかりませんでした。
C ファイルと C++ ファイルの両方で同じ動作を確認しました。過去(2012年)に誰かが同様のエラーに遭遇したことがわかりましたが、提案された回答は機能していないようで、とにかくC++ファイルのみを参照しているようです。手がかりはありますか?