From e488f10c7f630c3f3eba3c37faccbf487adf129c Mon Sep 17 00:00:00 2001
From: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
Date: Mon, 20 Apr 2015 12:38:50 +0200
Subject: [PATCH] Clang: Fix providing clang directory with intrinsics

Opening a main.cpp of a Qt Widget Application project that is configured
with a GCC toolchain leads to errors [1] like

    /usr/lib/gcc/x86_64-linux-gnu/4.8/include/ia32intrin.h:41:10: \
    error: use of undeclared identifier '__builtin_ia32_bsrsi'

due to a wrong determination of the clang directory with intrinsics. The
directory was determined as

    $${LLVM_LIBDIR}/clang/$${LLVM_VERSION}/include

whereas $LLVM_VERSION was extracted as e.g. "3.5" from 'llvm-config
--version' instead of "3.5.0".

The path of clang intrinsics dir shipped with Qt Creator (as package)
does also match this version scheme:

    $QTC_INSTALL_DIR/share/qtcreator/cplusplus/clang/3.4.2/include

[1] Visible with qtc.clangcodemodel.verboserun=true

Change-Id: I1061912eef437a9889987e638915d2fabe208011
Reviewed-by: hjk <hjk@theqtcompany.com>
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
---
 src/plugins/clangcodemodel/clang_installation.pri |  2 +-
 src/plugins/clangcodemodel/clangutils.cpp         | 15 ++++++++-------
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/src/plugins/clangcodemodel/clang_installation.pri b/src/plugins/clangcodemodel/clang_installation.pri
index 67a13ff413..ec2f3749b1 100644
--- a/src/plugins/clangcodemodel/clang_installation.pri
+++ b/src/plugins/clangcodemodel/clang_installation.pri
@@ -66,7 +66,7 @@ unix {
     LLVM_CONFIG = $$findLLVMConfig()
 
     LLVM_VERSION = $$system($$LLVM_CONFIG --version 2>/dev/null)
-    LLVM_VERSION = $$replace(LLVM_VERSION, ^(\\d+\\.\\d+).*$, \\1)
+    LLVM_VERSION = $$replace(LLVM_VERSION, ^(\\d+\\.\\d+\\.\\d+).*$, \\1)
     message("... version $$LLVM_VERSION")
 
     LLVM_INCLUDEPATH = $$system($$LLVM_CONFIG --includedir 2>/dev/null)
diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp
index 8f2f6ddd4d..0626a1fbde 100644
--- a/src/plugins/clangcodemodel/clangutils.cpp
+++ b/src/plugins/clangcodemodel/clangutils.cpp
@@ -151,6 +151,14 @@ QStringList createClangOptions(const ProjectPart::Ptr &pPart, ProjectFile::Kind
                   maybeIncludeBorlandExtensions());
     result << CompilerOptionsBuilder::createDefineOptions(pPart->toolchainDefines);
     result << CompilerOptionsBuilder::createDefineOptions(pPart->projectDefines);
+
+    static const QString resourceDir = getResourceDir();
+    if (!resourceDir.isEmpty()) {
+        result << QLatin1String("-nostdlibinc");
+        result << (QLatin1String("-I") + resourceDir);
+        result << QLatin1String("-undef");
+    }
+
     result << CompilerOptionsBuilder::createHeaderPathOptions(pPart->headerPaths, isBlacklisted);
 
     // Inject header file
@@ -164,13 +172,6 @@ QStringList createClangOptions(const ProjectPart::Ptr &pPart, ProjectFile::Kind
     if (!pPart->projectConfigFile.isEmpty())
         result << QLatin1String("-include") << pPart->projectConfigFile;
 
-    static const QString resourceDir = getResourceDir();
-    if (!resourceDir.isEmpty()) {
-        result << QLatin1String("-nostdlibinc");
-        result << (QLatin1String("-I") + resourceDir);
-        result << QLatin1String("-undef");
-    }
-
     result << QLatin1String("-fmessage-length=0");
     result << QLatin1String("-fdiagnostics-show-note-include-stack");
     result << QLatin1String("-fmacro-backtrace-limit=0");
-- 
GitLab