summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/compileroptionsbuilder.cpp
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2016-10-10 17:31:19 +0200
committerNikolai Kosjar <nikolai.kosjar@qt.io>2016-10-13 10:17:58 +0000
commit6884ab080e28699ca662878d7083cd84b9f206d4 (patch)
treea00e775540fcd16d38da0ee1cc0fd52173d1a351 /src/plugins/cpptools/compileroptionsbuilder.cpp
parent3d68a8d0dec033eebef7d0ead082a291afa9454d (diff)
downloadqt-creator-6884ab080e28699ca662878d7083cd84b9f206d4.tar.gz
ClangStaticAnalyzer: Fix path for intrinsics for clang toolchains
Ignore the include path for intrinsics coming from the toolchain. The clang static analyzer comes with its own intrinsics and does not cope well with intrinsics from other clang versions. Move the relevant implementation from LibClangOptionsBuilder into the base class so that ClangStaticAnalyzer profits from this, too. Task-number: QTCREATORBUG-17102 Change-Id: Id9a28ddebb889c862939332dce888a80b3bb7e63 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/cpptools/compileroptionsbuilder.cpp')
-rw-r--r--src/plugins/cpptools/compileroptionsbuilder.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp
index a5bf1ad0b6..c529e96b45 100644
--- a/src/plugins/cpptools/compileroptionsbuilder.cpp
+++ b/src/plugins/cpptools/compileroptionsbuilder.cpp
@@ -28,6 +28,7 @@
#include <projectexplorer/projectexplorerconstants.h>
#include <QDir>
+#include <QRegularExpression>
namespace CppTools {
@@ -393,7 +394,15 @@ bool CompilerOptionsBuilder::excludeDefineLine(const QByteArray &defineLine) con
bool CompilerOptionsBuilder::excludeHeaderPath(const QString &headerPath) const
{
- Q_UNUSED(headerPath);
+ // A clang tool chain might have another version and passing in the
+ // intrinsics path from that version will lead to errors (unknown
+ // intrinsics, unfavorable order with regard to include_next).
+ if (m_projectPart.toolchainType == ProjectExplorer::Constants::CLANG_TOOLCHAIN_TYPEID) {
+ static QRegularExpression clangIncludeDir(
+ QLatin1String("\\A.*/lib/clang/\\d+\\.\\d+(\\.\\d+)?/include\\z"));
+ return clangIncludeDir.match(headerPath).hasMatch();
+ }
+
return false;
}