clang-tidy 4.0 clang-analyzer-alpha.unix.PthreadLock check

Даже после того, как я подумал, что эта проверка отсутствует, я теперь внезапно получаю вывод clang-analyzer-alpha.unix.PthreadLock проверьте из инструмента clang-tidy 4.0. Вот урезанный вариант использования моего кода, который я пытаюсь модернизировать, используя инструмент clang-tidy. Я включил все проверки, используя -checks=* аргумент.

#include <boost/thread.hpp>
#include <boost/thread/once.hpp>

void foo2()
{
    boost:mutex mymutex;
    boost::mutex::scoped_lock lock(mymutex);       
    int* x = NULL; // This is intentional. This triggers the clang-tidy checks. If I remove this lines, I wont get the clang-tidy warnings/errors/recommendations.
}
int main() {

    foo2();
    return 0;
}

Когда clang-tidy запускается над этим кодом, он выдает следующие предупреждения.

path/boost/include/boost/thread/pthread/mutex.hpp:149:23: warning: This lock has already been acquired [clang-analyzer-alpha.unix.PthreadLock]
            int res = posix::pthread_mutex_lock(&m);
                      ^
path/Source.cpp:40:5: note: Calling 'foo2'
    foo2();
    ^
path/Source.cpp:32:31: note: Calling constructor for 'unique_lock'
    boost::mutex::scoped_lock lock(getMutex());    
                              ^
path/boost/include/boost/thread/lock_types.hpp:157:7: note: Calling 'unique_lock::lock'
      lock();
      ^
path/boost/include/boost/thread/lock_types.hpp:369:7: note: Taking false branch
      if (m == 0)
      ^
path/boost/include/boost/thread/lock_types.hpp:374:7: note: Taking false branch
      if (owns_lock())
      ^
path/boost/include/boost/thread/lock_types.hpp:379:7: note: Calling 'mutex::lock'
      m->lock();
      ^
path/boost/thread/pthread/mutex.hpp:149:23: note: This lock has already been acquired
            int res = posix::pthread_mutex_lock(&m);
                      ^
path/Source.cpp:34:10: warning: unused variable 'x' [clang-diagnostic-unused-variable]
    int* x = NULL; 
         ^
path/Source.cpp:34:14: warning: use nullptr [modernize-use-nullptr]
    int* x = NULL; 
             ^
             nullptr
Suppressed 33125 warnings (33125 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.

Почему Clang-Tidy считает, что эта блокировка уже была взята? Две функции полностью отделены друг от друга и замок внутри foo2 не имеет никакого отношения к блокировке в заголовках повышения. Это неверное предупреждение? Если нет, то что мне с этим делать?

0 ответов

Другие вопросы по тегам