Commit 98b66534 authored by Nikolai Kosjar's avatar Nikolai Kosjar

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's avatarChristian Kandeler <christian.kandeler@qt.io>
parent 08f0d37c
......@@ -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();
......
......@@ -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;
......
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment