diff options
author | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2016-10-17 11:51:13 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2016-10-18 15:07:15 +0000 |
commit | df581265c3ff379389fa2000c11c1d9a39f680fa (patch) | |
tree | e6448098d0fe7c5bb28020c042d072b544ec936f | |
parent | 57ac8d96c76b322c1b28c0cd4ed1d13e7b6056d2 (diff) | |
download | qt-creator-df581265c3ff379389fa2000c11c1d9a39f680fa.tar.gz |
Clang*: Workaround parsing mingw's <type_traits> with clang 3.9
...for -std=gnu++0x.
Define the unknown identifier/type "__float128" so at least the headers can be
parsed successfully. Of course this does not help for parsing client code
referencing that identifier, but this should be the less common case.
Task-number: QTCREATORBUG-17126
Change-Id: Id321311713029d8aa77e068b02361d86debfada6
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
5 files changed, 13 insertions, 0 deletions
diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp index 573d1be1fd..1d704c8a88 100644 --- a/src/plugins/clangcodemodel/clangutils.cpp +++ b/src/plugins/clangcodemodel/clangutils.cpp @@ -96,6 +96,7 @@ public: optionsBuilder.enableExceptions(); optionsBuilder.addDefineToAvoidIncludingGccOrMinGwIntrinsics(); + optionsBuilder.addDefineFloat128ForMingw(); optionsBuilder.addToolchainAndProjectDefines(); optionsBuilder.undefineCppLanguageFeatureMacrosForMsvc2015(); diff --git a/src/plugins/clangrefactoring/refactoringcompileroptionsbuilder.cpp b/src/plugins/clangrefactoring/refactoringcompileroptionsbuilder.cpp index ca79ca5e4a..5fa28940f5 100644 --- a/src/plugins/clangrefactoring/refactoringcompileroptionsbuilder.cpp +++ b/src/plugins/clangrefactoring/refactoringcompileroptionsbuilder.cpp @@ -130,6 +130,7 @@ Utils::SmallStringVector RefactoringCompilerOptionsBuilder::build(CppTools::Proj optionsBuilder.addOptionsForLanguage(/*checkForBorlandExtensions*/ true); optionsBuilder.enableExceptions(); + optionsBuilder.addDefineFloat128ForMingw(); optionsBuilder.addDefineToAvoidIncludingGccOrMinGwIntrinsics(); optionsBuilder.addToolchainAndProjectDefines(); optionsBuilder.undefineCppLanguageFeatureMacrosForMsvc2015(); diff --git a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp index 4185b6bfaa..10cb6115ba 100644 --- a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp +++ b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp @@ -175,6 +175,7 @@ public: optionsBuilder.addOptionsForLanguage(false); optionsBuilder.enableExceptions(); + optionsBuilder.addDefineFloat128ForMingw(); optionsBuilder.addDefineToAvoidIncludingGccOrMinGwIntrinsics(); const Core::Id type = projectPart.toolchainType; if (type != ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID) diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index c62feb94cd..a2b2ed3ba6 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -368,6 +368,14 @@ void CompilerOptionsBuilder::undefineCppLanguageFeatureMacrosForMsvc2015() } } +void CompilerOptionsBuilder::addDefineFloat128ForMingw() +{ + // TODO: Remove once this is fixed in clang >= 3.9. + // https://llvm.org/bugs/show_bug.cgi?id=30685 + if (m_projectPart.toolchainType == ProjectExplorer::Constants::MINGW_TOOLCHAIN_TYPEID) + addDefine("#define __float128 void"); +} + QString CompilerOptionsBuilder::includeOption() const { return QLatin1String("-I"); diff --git a/src/plugins/cpptools/compileroptionsbuilder.h b/src/plugins/cpptools/compileroptionsbuilder.h index 4cae4bb353..ced3c0af1b 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.h +++ b/src/plugins/cpptools/compileroptionsbuilder.h @@ -58,6 +58,8 @@ public: void addMsvcCompatibilityVersion(); void undefineCppLanguageFeatureMacrosForMsvc2015(); + void addDefineFloat128ForMingw(); + protected: virtual bool excludeDefineDirective(const QByteArray &defineDirective) const; virtual bool excludeHeaderPath(const QString &headerPath) const; |