Я использую статический анализатор clang 4.0.0. Для следующего примера
int fun(){
int aa = 1,bb = 0;
int cc = aa/bb; // 1) devide by zero. // Reported by clang
int *pt = nullptr;
int a = *pt; // 2) null pointer dereference. // NOT Reported by clang
int b;
int c = a + b; // 3) Unused initialization. // Reported by clang
return cc;
}
Статический анализатор Clang сообщает только о двух проблемах 1 и 3 и пропускает проблему 2.
В то время как если бы я изменил порядок выдачи вот так
int fun(){
int *pt = nullptr;
int a = *pt; // 1) null pointer dereference. // Reported by clang
int aa = 1,bb = 0;
int cc = aa/bb; // 2) devide by zero. // NOT Reported by clang
int b;
int c = a + b; // 3) Unused initialization. // Reported by clang
return cc;
}
Затем статический анализатор хлопает по отчетам 1 и 3 и пропускает 2.
Я запускаю статический анализатор clang с помощью этой команды
clang-check.exe -analyze D: \ testsrc \ anothercpp.cpp
Это очень непоследовательное поведение. Независимо от того, в каком порядке находятся проблемы, одна из проблем пропускается. Кроме того, я проверил этот сценарий с помощью clang 5.0.1 только для получения тех же результатов.
Кто-нибудь знает, почему это происходит со статическим анализатором?
Заранее спасибо.
-Гемант