2016-11-16 2 views
5

У меня есть сборка, которая использует лязг-аккуратный через CMake:Глушащего лязг-аккуратный

set_target_properties(project 
    PROPERTIES 
    ... 
    CXX_CLANG_TIDY 
     "/usr/bin/clang-tidy" 
     "-checks=modernize-*,readability-*,performance-*" 
     "-fix" 
) 

При создании его я получаю возможную утечку памяти внутри библиотеки Qt:

/opt/Qt5.7.0/5.7/gcc_64/include/QtCore/qobject.h:242:16: warning: Potential memory leak [clang-analyzer-cplusplus.NewDeleteLeaks] 
     return connectImpl(sender, reinterpret_cast<void **>(&signal), 
      ^
.../a.cpp:27:5: note: Taking false branch 
    if (not inputQFile.makeAbsolute()) { 
    ^
.../a.cpp:33:5: note: Calling 'QObject::connect' 
    connect(this, static_cast<void (QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished), 
    ^
/opt/Qt5.7.0/5.7/gcc_64/include/QtCore/qobject.h:238:13: note: Left side of '||' is false 
     if (type == Qt::QueuedConnection || type == Qt::BlockingQueuedConnection) 
      ^
/opt/Qt5.7.0/5.7/gcc_64/include/QtCore/qobject.h:238:9: note: Taking false branch 
     if (type == Qt::QueuedConnection || type == Qt::BlockingQueuedConnection) 
     ^
/opt/Qt5.7.0/5.7/gcc_64/include/QtCore/qobject.h:242:16: note: Potential memory leak 
     return connectImpl(sender, reinterpret_cast<void **>(&signal), 
      ^

Как может Я замолчу это?

То, что я уже пробовал:

  1. Добавить // NOLINT до конца a.cpp: 33 -> нет эффекта
  2. Добавить в // NOLINT до конца qobject.h: 242 -> нет эффекта
  3. Wrap qobject.h: 242 в #ifndef __clang_analyzer__ -> нет эффекта
  4. Wrap всех qobject.h в #ifndef __clang_analyzer__ -> никакого эффекта
  5. Добавить // NOLINT по всем линиям connectI MPL -> лязг-аккуратная авария

@Tarod: Вот что я в настоящее время:

#ifndef __clang_analyzer__ 
     return connectImpl(sender, reinterpret_cast<void **>(&signal), 
          receiver, reinterpret_cast<void **>(&slot), 
          new QtPrivate::QSlotObject<Func2, typename QtPrivate::List_Left<typename SignalType::Arguments, SlotType::ArgumentCount>::Value, // NOLINT 
              typename SignalType::ReturnType>(slot), 
          type, types, &SignalType::Object::staticMetaObject); // NOLINT 
#endif //__clang_analyzer__ 
+0

'#ifndef __clang_analyzer__' должен работать. Вы помещаете '# endif' в конец файла' qobject.h'? – Tarod

+0

@Tarod Я обновил вопрос – Mac

+0

Такая же проблема, если вы положили '#ifndef __clang_analyzer__' в начало файла' qobject.h'? – Tarod

ответ

2

Я думаю, вы должны комментировать все ваши 5 строк connectImpl() или аналогичные, так как // NOLINT влияет только одна строка кода. (1)

+0

Если я делаю эти clang-tidy сбои ... Ошибка при запуске '/ usr/bin/clang-tidy' – Mac

+1

muahaha, это похоже на проверенный инструмент ...;) Используете ли вы свою последнюю версию? – falkb

+0

Yup Я использовал последнюю версию. 3.9.1 – Mac