From 82cf0e60fbf4d49987b9e51bf0c1813f61ba1d02 Mon Sep 17 00:00:00 2001
From: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
Date: Tue, 17 Nov 2015 16:25:02 +0100
Subject: [PATCH] Clang: Fix include paths for MSVC toolchains

Prevent libclang from using any builtin includes paths or any standard system
directories. The project manager provides us all the necessary information.

Task-number: QTCREATORBUG-15345
Change-Id: I70e2dafea8d049a9b7a32b24ce2d4ce3dac2cd3b
Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
---
 src/plugins/clangcodemodel/clangutils.cpp | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp
index fd9064a3f56..28c223d80ad 100644
--- a/src/plugins/clangcodemodel/clangutils.cpp
+++ b/src/plugins/clangcodemodel/clangutils.cpp
@@ -41,6 +41,8 @@
 #include <cpptools/cppprojects.h>
 #include <cpptools/cppworkingcopy.h>
 
+#include <projectexplorer/projectexplorerconstants.h>
+
 #include <utils/qtcassert.h>
 
 #include <QDir>
@@ -122,7 +124,7 @@ public:
 
         optionsBuilder.addToolchainAndProjectDefines();
 
-        optionsBuilder.addResourceDirOptions();
+        optionsBuilder.addPredefinedMacrosAndHeaderPathsOptions();
         optionsBuilder.addWrappedQtHeadersIncludePath();
         optionsBuilder.addHeaderPathOptions();
         optionsBuilder.addProjectConfigFileInclude();
@@ -154,7 +156,21 @@ private:
         return false;
     }
 
-    void addResourceDirOptions()
+    void addPredefinedMacrosAndHeaderPathsOptions()
+    {
+        if (m_projectPart.toolchainType == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID)
+            addPredefinedMacrosAndHeaderPathsOptionsForMsvc();
+        else
+            addPredefinedMacrosAndHeaderPathsOptionsForNonMsvc();
+    }
+
+    void addPredefinedMacrosAndHeaderPathsOptionsForMsvc()
+    {
+        add(QLatin1String("-nostdinc"));
+        add(QLatin1String("-undef"));
+    }
+
+    void addPredefinedMacrosAndHeaderPathsOptionsForNonMsvc()
     {
         static const QString resourceDir = getResourceDir();
         if (!resourceDir.isEmpty()) {
-- 
GitLab