What is wrong with this clang-tidy command line?

Viewed 517

I am trying to use clang-tidy to analyze on of my projects. I am using the following command line.

"C:\Program Files\LLVM\bin\clang-tidy.exe" -p G:\src\svn\SnKOpen\cpp\TTSApp\trunk\TTSApp --extra-arg=-D_DLL --extra-arg=-D_MT --extra-arg=-fms-compatibility-version=19.10 --extra-arg=-Wall --extra-arg=-Wmicrosoft --extra-arg=-Wno-invalid-token-paste --extra-arg=-Wno-unknown-pragmas --extra-arg=-Wno-unused-value "--extra-arg=-cxx-isystemC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\include" "--extra-arg=-cxx-isystemC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\atlmfc\include" "--extra-arg=-cxx-isystemC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\VS\include" "--extra-arg=-cxx-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt" "--extra-arg=-cxx-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um" "--extra-arg=-cxx-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared" "--extra-arg=-cxx-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt" "--extra-arg=-cxx-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt" "--extra-arg=-cxx-isystemC:\Program Files (x86)\Windows Kits\NETFXSDK\4.7.2\Include\um" "--extra-arg=-cxx-isystemC:\Program Files (x86)\Microsoft SDKs\Speech\v11.0\Include" --extra-arg=-cxx-isystemD:\vcpkg\installed\x64-windows\include --extra-arg=-cxx-isystemD:\vcpkg\installed\x86-windows\include "--extra-arg=-isystemC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\include" "--extra-arg=-isystemC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\atlmfc\include" "--extra-arg=-isystemC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\VS\include" "--extra-arg=-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt" "--extra-arg=-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um" "--extra-arg=-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared" "--extra-arg=-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt" "--extra-arg=-isystemC:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt" "--extra-arg=-isystemC:\Program Files (x86)\Windows Kits\NETFXSDK\4.7.2\Include\um" "--extra-arg=-isystemC:\Program Files (x86)\Microsoft SDKs\Speech\v11.0\Include" --extra-arg=-isystemD:\vcpkg\installed\x64-windows\include --extra-arg=-isystemD:\vcpkg\installed\x86-windows\include G:\src\svn\SnKOpen\cpp\TTSApp\trunk\TTSApp\TTSApp.cpp

My understanding of the isystem command line argument is that it adds a directory to the SYSTEM include search path. My understanding of clang-tidy is that if you do not use the -system-headers command line argument it will not include issues from system header files. In addition, my understanding is that system header files are those in directories located in any directory in the isystem list or any directory under a directory in the isystem list.

I am getting numerous issues for Boost headers located under "D:\vcpkg\installed\x64-windows\include\boost...". The problem is that the directory "D:\vcpkg\installed\x64-windows" is in my isystem list and the directory "D:\vcpkg\installed\x64-windows\include\boost..." is under "D:\vcpkg\installed\x64-windows."

If my understanding of clang-tidy and the purpose of the isystem command line argument is correct, clang-tidy should not be bothering me with these issues.

I also attempted the following command line argument.

"C:\Program Files\LLVM\bin\clang-tidy.exe" -p G:\src\svn\SnKOpen\cpp\TTSApp\trunk\TTSApp G:\src\svn\SnKOpen\cpp\TTSApp\trunk\TTSApp\TTSApp.cpp -- -D_DLL -D_MT -fms-compatibility-version=19.10 -Wall -Wmicrosoft -Wno-invalid-token-paste -Wno-unknown-pragmas -Wno-unused-value -cxx-isystem "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\include" -cxx-isystem "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\atlmfc\include" -cxx-isystem "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\VS\include" -cxx-isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt" -cxx-isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um" -cxx-isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared" -cxx-isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt" -cxx-isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt" -cxx-isystem "C:\Program Files (x86)\Windows Kits\NETFXSDK\4.7.2\Include\um" -cxx-isystem "C:\Program Files (x86)\Microsoft SDKs\Speech\v11.0\Include" -cxx-isystem D:\vcpkg\installed\x64-windows\include -cxx-isystem D:\vcpkg\installed\x86-windows\include -isystem "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\include" -isystem "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.25.28610\atlmfc\include" -isystem "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\VS\include" -isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt" -isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um" -isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared" -isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt" -isystem "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt" -isystem "C:\Program Files (x86)\Windows Kits\NETFXSDK\4.7.2\Include\um" -isystem "C:\Program Files (x86)\Microsoft SDKs\Speech\v11.0\Include" -isystem D:\vcpkg\installed\x64-windows\include -isystem D:\vcpkg\installed\x86-windows\include

The result is the same.

1 Answers

I figured it out. As it turned out, there was nothing wrong with either the command line or my understanding of the expected functionality of the isystem command line argument.

The problem was that I failed to realize that there are two different types of issues identified by Clang-Tidy, warnings and errors.

Clang-Tidy will not bother you about warnings found in system includes unless you use the -system-headers command line argument. However, nothing can suppress errors. The Boost related issues that had me so annoyed were errors. Specifically there are multiple instances of the following error.

error: conflicting types for '${FunctionName}'

These errors occurred for several Windows API functions. These errors can be prevented by defining BOOST_USE_WINDOWS_H.

Related