Silence clang-tidy

I have an assembly that uses clang-tidy via cmake:

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

When I create it, I get a possible memory leak inside the Qt libraries:

 /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), ^ 

How can I disable this?

What I already tried:

  • Add // NOLINT to the end of a.cpp: 33 -> no effect
  • Add // NOLINT to the end of qobject.h: 242 -> no effect
  • Wrap qobject.h: 242 in #ifndef __clang_analyzer__ no effect
  • Wrap all qobject.h in #ifndef __clang_analyzer__ → no effect
  • Add // NOLINT to all connectImpl lines → clang-tidy crashes

@Tarod: Here is what I have now:

 #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__ 
+5
source share
2 answers

I think you should comment on all your 5 lines of connectImpl () or similar, since // NOLINT affects only one line of code. (1)

+3
source

If you used clang-tidy in QtCreator, see

https://bugreports.qt.io/browse/QTCREATORBUG-20744

QtCreator uses additional tools, and this library does not yet support // NOLINT, etc.

0
source

Source: https://habr.com/ru/post/1259861/


All Articles