Я скомпилировал программу с scan-build make
int FanotifyPolling::writeResponse(const struct fanotify_response response,
int doBuffer) {
int ret = 0;
struct stat statbuf;
pthread_mutex_lock(&mutex_response);
if (doBuffer) {
//
// 23 Taking false branch
//
// Add file to scan buffer.
ret = fstat(response.fd, &statbuf);
if (ret != -1) {
e->getScanCache()->add(&statbuf, response.response);
}
}
if (response.response == FAN_DENY && response.fd >= FAN_NOFD) {
//
// 24 The left operand of '==' is a garbage value
//
Комментарии 23 и 24 взяты из сгенерированного результата анализа кода stati c.
Почему Кланг считает, что ответ .response является значением мусора, если doBuffer имеет значение false? Значение response.response предоставляется вызывающей стороной и не может зависеть от doBuffer.