From 98b66534d5ea028eb1a371bace92ed2bee43caaf Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Thu, 7 Jul 2016 11:45:46 +0200 Subject: [PATCH] ClangStaticAnalyzer: Stop passing on toolchain defines for qmake/msvc case Re-produce with: 1) Open qt-essential-includes.pro and configure it with a Qt 5.7.0 MSVC2013 64 Bit Kit. 2) Run the analyzer. Errors during analyzing occur in winnt.h [1]. This is somehow related to /D__int32=long that we pass on. Removing it helps. It looks like there is no reason anymore to pass on the toolchain defines with clang-3.8 at all. Our unit test projects can be parsed by the analyzer without them. Tested with the following kits: Qt 5.6.0 (mingw39_32) Qt 5.6.0 (msvc2013) Qt 5.6.0 (msvc2013_64) Qt 5.6.0 (msvc2015) Qt 5.6.0 (msvc2015_64) Qt 5.7.0 (mingw53_32) Qt 5.7.0 (msvc2013) Qt 5.7.0 (msvc2013_64) Qt 5.7.0 (msvc2015) Qt 5.7.0 (msvc2015_64) [1] In file included from D:\dev\creator\creator-4.1\src\plugins\clangstaticanalyzer\unit-tests\qt-essential-includes\main.cpp:2: In file included from D:/usr/qt-5.7.0-msvc2013_64/5.7/msvc2013_64/include/QtGui\QtGui:32: In file included from D:/usr/qt-5.7.0-msvc2013_64/5.7/msvc2013_64/include/QtGui/qopenglcontext.h:60: In file included from D:/usr/qt-5.7.0-msvc2013_64/5.7/msvc2013_64/include\QtGui/qopengl.h:49: In file included from D:/usr/qt-5.7.0-msvc2013_64/5.7/msvc2013_64/include\QtCore/qt_windows.h:61: In file included from C:\Program Files (x86)\Windows Kits\8.1\include\um\windows.h:164: In file included from C:\Program Files (x86)\Windows Kits\8.1\include\shared\windef.h:24: In file included from C:\Program Files (x86)\Windows Kits\8.1\include\shared\minwindef.h:182: C:\Program Files (x86)\Windows Kits\8.1\include\um\winnt.h(3077,1) : error: functions that differ only in their return type cannot be overloaded __getcallerseflags ( ^ D:\dev\llvm\3.8\changingLibClang_install\bin\..\lib\clang\3.8.1\include\intrin.h(68,14) : note: previous declaration is here unsigned int __getcallerseflags(void); ~~~~~~~~ ^ 1 error generated. Change-Id: I2de8d0393a575f88dd59dfa71fbfb11f2debc158 Reviewed-by: Christian Kandeler --- .../clangstaticanalyzerruncontrol.cpp | 4 +++- src/plugins/cpptools/compileroptionsbuilder.cpp | 9 +++++++-- src/plugins/cpptools/compileroptionsbuilder.h | 1 + 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp index e938e547b36..1987ae86799 100644 --- a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp +++ b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp @@ -183,7 +183,9 @@ public: || type == ProjectExplorer::Constants::GCC_TOOLCHAIN_TYPEID) optionsBuilder.addDefine("#define _X86INTRIN_H_INCLUDED\n"); - optionsBuilder.addToolchainAndProjectDefines(); + if (type != ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID) + optionsBuilder.addDefines(projectPart.toolchainDefines); + optionsBuilder.addDefines(projectPart.projectDefines); optionsBuilder.undefineClangVersionMacrosForMsvc(); optionsBuilder.undefineCppLanguageFeatureMacrosForMsvc2015(); optionsBuilder.addHeaderPathOptions(); diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index faf78f925d7..a5bf1ad0b65 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -137,10 +137,15 @@ void CompilerOptionsBuilder::addHeaderPathOptions(bool addAsNativePath) void CompilerOptionsBuilder::addToolchainAndProjectDefines() { - QByteArray extendedDefines = m_projectPart.toolchainDefines + m_projectPart.projectDefines; + addDefines(m_projectPart.toolchainDefines); + addDefines(m_projectPart.projectDefines); +} + +void CompilerOptionsBuilder::addDefines(const QByteArray &defineDirectives) +{ QStringList result; - foreach (QByteArray def, extendedDefines.split('\n')) { + foreach (QByteArray def, defineDirectives.split('\n')) { if (def.isEmpty() || excludeDefineLine(def)) continue; diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h index 4ef43b53da4..739db8b5f67 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.h +++ b/src/plugins/cpptools/compileroptionsbuilder.h @@ -48,6 +48,7 @@ public: virtual void enableExceptions(); void addHeaderPathOptions(bool addAsNativePath = false); void addToolchainAndProjectDefines(); + void addDefines(const QByteArray &defineDirectives); virtual void addLanguageOption(ProjectFile::Kind fileKind); virtual void addOptionsForLanguage(bool checkForBorlandExtensions = true);