2016-11-16 13 views
5

mam build który wykorzystuje dzyń-uporządkowane przez cmake:Wyciszanie dzyń-schludny

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

Budując go Dostaję ewentualnego przecieku pamięci wewnątrz biblioteki 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), 
      ^

Jak można Uciszę to?

Co ja już próbowałem:

  1. Dodaj // NOLINT do końca a.cpp: 33 -> brak efektu
  2. Dodaj // NOLINT do końca qobject.h: 242 -> Brak efektu
  3. Wrap qobject.h: 242 w sposób #ifndef __clang_analyzer__ -> brak efektu
  4. Wrap wszystkie qobject.h w sposób #ifndef __clang_analyzer__ -> brak efektu
  5. Dodaj // NOLINT na wszystkich liniach connecti MPL -> dzyń-schludny awarii

@Tarod: Oto co obecnie mam:

#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__' powinien działać. Czy umieszczasz '# endif' na końcu pliku' qobject.h'? – Tarod

+0

@ Tarod Zaktualizowałem pytanie – Mac

+0

Ten sam problem, jeśli wstawisz '#ifndef __clang_analyzer__' na początku pliku' qobject.h'? – Tarod

Odpowiedz

2

myślę, że trzeba komentować wszystkich 5 linii connectImpl() lub podobny, ponieważ wpływa // NOLINT tylko jedna linia kodu. (1)

+0

Jeśli zrobię, że clang-tidy wywala ... Błąd uruchamiania '/ usr/bin/clang-tidy' – Mac

+1

muahaha, wygląda to jak dobrze przetestowane narzędzie ...;) Czy używasz ich najnowszej wersji? – falkb

+0

Yup użyłem najnowszej wersji. 3.9.1 – Mac