diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
index 19f3bdaa22ec511937f57591e12e654e6af2a53d..35165926183e49fca90ac7b921777f5ddcf957eb 100644
--- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
+++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
@@ -419,16 +419,24 @@ static QStringList warningOptions(CppTools::ProjectPart *projectPart)
 {
     if (projectPart && projectPart->project) {
         ClangProjectSettings projectSettings(projectPart->project);
-        if (!projectSettings.useGlobalWarningConfig()) {
+        if (!projectSettings.useGlobalConfig()) {
             const Core::Id warningConfigId = projectSettings.warningConfigId();
             const CppTools::ClangDiagnosticConfigsModel configsModel(
                         CppTools::codeModelSettings()->clangCustomDiagnosticConfigs());
             if (configsModel.hasConfigWithId(warningConfigId))
-                return configsModel.configWithId(warningConfigId).commandLineOptions();
+                return configsModel.configWithId(warningConfigId).commandLineWarnings();
         }
     }
 
-    return CppTools::codeModelSettings()->clangDiagnosticConfig().commandLineOptions();
+    return CppTools::codeModelSettings()->clangDiagnosticConfig().commandLineWarnings();
+}
+
+static QStringList commandLineOptions(CppTools::ProjectPart *projectPart)
+{
+    if (!projectPart || !projectPart->project)
+        return ClangProjectSettings::globalCommandLineOptions();
+
+    return ClangProjectSettings{projectPart->project}.commandLineOptions();
 }
 
 static QStringList precompiledHeaderOptions(
@@ -454,6 +462,7 @@ static QStringList fileArguments(const QString &filePath, CppTools::ProjectPart
 {
     return languageOptions(filePath, projectPart)
             + warningOptions(projectPart)
+            + commandLineOptions(projectPart)
             + precompiledHeaderOptions(filePath, projectPart);
 }
 
diff --git a/src/plugins/clangcodemodel/clangprojectsettings.cpp b/src/plugins/clangcodemodel/clangprojectsettings.cpp
index 5cb02d6909779f1df08872eb638cec3e863e9770..2668ee399852af53576873b68be5b941fe0be40f 100644
--- a/src/plugins/clangcodemodel/clangprojectsettings.cpp
+++ b/src/plugins/clangcodemodel/clangprojectsettings.cpp
@@ -25,15 +25,23 @@
 
 #include "clangprojectsettings.h"
 
+#include <utils/qtcassert.h>
+#include <utils/hostosinfo.h>
+
+#include <QDebug>
+
 namespace ClangCodeModel {
 namespace Internal {
 
-static QString useGlobalWarningConfigKey()
-{ return QStringLiteral("ClangCodeModel.UseGlobalWarningConfig"); }
+static QString useGlobalConfigKey()
+{ return QStringLiteral("ClangCodeModel.UseGlobalConfig"); }
 
 static QString warningConfigIdKey()
 { return QStringLiteral("ClangCodeModel.WarningConfigId"); }
 
+static QString customCommandLineKey()
+{ return QLatin1String("ClangCodeModel.CustomCommandLineKey"); }
+
 ClangProjectSettings::ClangProjectSettings(ProjectExplorer::Project *project)
     : m_project(project)
 {
@@ -55,31 +63,55 @@ void ClangProjectSettings::setWarningConfigId(const Core::Id &customConfigId)
     m_warningConfigId = customConfigId;
 }
 
-bool ClangProjectSettings::useGlobalWarningConfig() const
+bool ClangProjectSettings::useGlobalConfig() const
+{
+    return m_useGlobalConfig;
+}
+
+void ClangProjectSettings::setUseGlobalConfig(bool useGlobalConfig)
 {
-    return m_useGlobalWarningConfig;
+    m_useGlobalConfig = useGlobalConfig;
 }
 
-void ClangProjectSettings::setUseGlobalWarningConfig(bool useGlobalWarningConfig)
+QStringList ClangProjectSettings::commandLineOptions() const
 {
-    m_useGlobalWarningConfig = useGlobalWarningConfig;
+    return m_useGlobalConfig ? globalCommandLineOptions()
+                             : m_customCommandLineOptions;
+}
+
+void ClangProjectSettings::setCommandLineOptions(const QStringList &options)
+{
+    QTC_ASSERT(!m_useGlobalConfig, qDebug()
+               << "setCommandLineOptions was called while using global project config");
+    m_customCommandLineOptions = options;
 }
 
 void ClangProjectSettings::load()
 {
-    const QVariant useGlobalConfigVariant = m_project->namedSettings(useGlobalWarningConfigKey());
+    const QVariant useGlobalConfigVariant = m_project->namedSettings(useGlobalConfigKey());
     const bool useGlobalConfig = useGlobalConfigVariant.isValid()
             ? useGlobalConfigVariant.toBool()
             : true;
 
-    setUseGlobalWarningConfig(useGlobalConfig);
+    setUseGlobalConfig(useGlobalConfig);
     setWarningConfigId(Core::Id::fromSetting(m_project->namedSettings(warningConfigIdKey())));
+    m_customCommandLineOptions = m_project->namedSettings(customCommandLineKey()).toStringList();
+    if (m_customCommandLineOptions.empty())
+        m_customCommandLineOptions = globalCommandLineOptions();
 }
 
 void ClangProjectSettings::store()
 {
-    m_project->setNamedSettings(useGlobalWarningConfigKey(), useGlobalWarningConfig());
+    m_project->setNamedSettings(useGlobalConfigKey(), useGlobalConfig());
     m_project->setNamedSettings(warningConfigIdKey(), warningConfigId().toSetting());
+    m_project->setNamedSettings(customCommandLineKey(), m_customCommandLineOptions);
+}
+
+QStringList ClangProjectSettings::globalCommandLineOptions()
+{
+    if (Utils::HostOsInfo::isWindowsHost())
+        return {QLatin1String{GlobalWindowsCmdOptions}};
+    return {};
 }
 
 } // namespace Internal
diff --git a/src/plugins/clangcodemodel/clangprojectsettings.h b/src/plugins/clangcodemodel/clangprojectsettings.h
index 481f7932dc1ee9275c2d421f54c331266e7213af..01aabfb6e98bd838b32152b9b862f8af58d89540 100644
--- a/src/plugins/clangcodemodel/clangprojectsettings.h
+++ b/src/plugins/clangcodemodel/clangprojectsettings.h
@@ -39,21 +39,32 @@ class ClangProjectSettings: public QObject
     Q_OBJECT
 
 public:
+    constexpr static const char* DelayedTemplateParsing = "-fdelayed-template-parsing";
+    constexpr static const char* NoDelayedTemplateParsing = "-fno-delayed-template-parsing";
+    constexpr static const char* GlobalWindowsCmdOptions = NoDelayedTemplateParsing;
+
     ClangProjectSettings(ProjectExplorer::Project *project);
 
-    bool useGlobalWarningConfig() const;
-    void setUseGlobalWarningConfig(bool useGlobalWarningConfig);
+    bool useGlobalConfig() const;
+    void setUseGlobalConfig(bool useGlobalConfig);
 
     Core::Id warningConfigId() const;
     void setWarningConfigId(const Core::Id &warningConfigId);
 
+    QStringList commandLineOptions() const;
+    void setCommandLineOptions(const QStringList &options);
+
     void load();
     void store();
 
+    static QStringList globalCommandLineOptions();
+
 private:
     ProjectExplorer::Project *m_project;
-    bool m_useGlobalWarningConfig = true;
+    bool m_useGlobalConfig = true;
     Core::Id m_warningConfigId;
+
+    QStringList m_customCommandLineOptions;
 };
 
 } // namespace Internal
diff --git a/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp b/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp
index b44408f26f19a14c4bbc53d3952a5e40355efaa5..d8148a158da70a0e4a867e8b3fa50179ed27faa3 100644
--- a/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp
+++ b/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp
@@ -34,60 +34,21 @@
 #include <cpptools/cppcodemodelsettings.h>
 #include <cpptools/cpptoolsreuse.h>
 
-static const char GLOBAL_PROXY_CONFIG_ID[] = "globalProxyConfig";
+#include <utils/hostosinfo.h>
 
 namespace ClangCodeModel {
 namespace Internal {
 
-static CppTools::ClangDiagnosticConfig
-createConfigRepresentingGlobalSetting(const CppTools::ClangDiagnosticConfig &baseConfig)
+static Core::Id configIdForProject(ClangProjectSettings &projectSettings)
 {
-    CppTools::ClangDiagnosticConfig config = baseConfig;
-    config.setId(GLOBAL_PROXY_CONFIG_ID);
-
-    QString displayName = config.displayName();
-    if (config.isReadOnly())
-        displayName = CppTools::ClangDiagnosticConfigsModel::displayNameWithBuiltinIndication(config);
-    displayName = ClangProjectSettingsWidget::tr("Global setting (%1)").arg(displayName);
-
-    config.setDisplayName(displayName);
-    config.setIsReadOnly(true);
-
-    return config;
-}
-
-static Core::Id globalConfigId(const CppTools::CppCodeModelSettings &settings,
-                               const CppTools::ClangDiagnosticConfigsModel &model)
-{
-    const Core::Id configId = settings.clangDiagnosticConfigId();
-
-    if (model.hasConfigWithId(configId))
-        return configId;
-
-    return model.at(0).id(); // Config saved in the settings was removed, fallback to first.
-}
-
-static CppTools::ClangDiagnosticConfigsModel
-createConfigsModelWithGlobalProxyConfig(const CppTools::CppCodeModelSettings &settings)
-{
-    using namespace CppTools;
-    ClangDiagnosticConfigsModel configsModel(settings.clangCustomDiagnosticConfigs());
-
-    const Core::Id globalId = globalConfigId(settings, configsModel);
-    const ClangDiagnosticConfig globalConfig = configsModel.configWithId(globalId);
-    const ClangDiagnosticConfig globalProxy
-            = createConfigRepresentingGlobalSetting(globalConfig);
-
-    configsModel.prepend(globalProxy);
-
-    return configsModel;
-}
-
-static Core::Id configIdForProject(const ClangProjectSettings &projectSettings)
-{
-    return projectSettings.useGlobalWarningConfig()
-            ? Core::Id(GLOBAL_PROXY_CONFIG_ID)
-            : projectSettings.warningConfigId();
+    if (projectSettings.useGlobalConfig())
+        return CppTools::codeModelSettings()->clangDiagnosticConfigId();
+    Core::Id configId = projectSettings.warningConfigId();
+    if (!configId.isValid()) {
+        configId = CppTools::codeModelSettings()->clangDiagnosticConfigId();
+        projectSettings.setWarningConfigId(configId);
+    }
+    return configId;
 }
 
 ClangProjectSettingsWidget::ClangProjectSettingsWidget(ProjectExplorer::Project *project)
@@ -98,24 +59,33 @@ ClangProjectSettingsWidget::ClangProjectSettingsWidget(ProjectExplorer::Project
     using namespace CppTools;
 
     m_diagnosticConfigWidget = new ClangDiagnosticConfigsWidget;
-    m_diagnosticConfigWidget->setConfigWithUndecoratedDisplayName(Core::Id(GLOBAL_PROXY_CONFIG_ID));
     refreshDiagnosticConfigsWidgetFromSettings();
+
+    m_ui.generalConfigurationGroupBox->setVisible(Utils::HostOsInfo::isWindowsHost());
+
+    m_ui.clangSettings->setCurrentIndex(m_projectSettings.useGlobalConfig() ? 0 : 1);
+    syncOtherWidgetsToComboBox();
+
     connectToCppCodeModelSettingsChanged();
     connect(m_diagnosticConfigWidget.data(), &ClangDiagnosticConfigsWidget::currentConfigChanged,
             this, &ClangProjectSettingsWidget::onCurrentWarningConfigChanged);
     connect(m_diagnosticConfigWidget.data(), &ClangDiagnosticConfigsWidget::customConfigsChanged,
             this, &ClangProjectSettingsWidget::onCustomWarningConfigsChanged);
+    connect(m_ui.delayedTemplateParse, &QCheckBox::toggled,
+            this, &ClangProjectSettingsWidget::onDelayedTemplateParseClicked);
+    connect(m_ui.clangSettings,
+            static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
+            this, &ClangProjectSettingsWidget::onClangSettingsChanged);
 
     m_ui.diagnosticConfigurationGroupBox->layout()->addWidget(m_diagnosticConfigWidget);
 }
 
 void ClangProjectSettingsWidget::onCurrentWarningConfigChanged(const Core::Id &currentConfigId)
 {
-    const bool useGlobalConfig = currentConfigId == Core::Id(GLOBAL_PROXY_CONFIG_ID);
-
-    m_projectSettings.setUseGlobalWarningConfig(useGlobalConfig);
+    // Don't save it when we reset the global config in code
+    if (m_projectSettings.useGlobalConfig())
+        return;
     m_projectSettings.setWarningConfigId(currentConfigId);
-
     m_projectSettings.store();
 }
 
@@ -132,11 +102,48 @@ void ClangProjectSettingsWidget::onCustomWarningConfigsChanged(
     connectToCppCodeModelSettingsChanged();
 }
 
+void ClangProjectSettingsWidget::onDelayedTemplateParseClicked(bool checked)
+{
+    // Don't save it when we reset the global config in code
+    if (m_projectSettings.useGlobalConfig())
+        return;
+
+    const QLatin1String extraFlag{checked ? ClangProjectSettings::DelayedTemplateParsing
+                                          : ClangProjectSettings::NoDelayedTemplateParsing};
+    QStringList options = m_projectSettings.commandLineOptions();
+    options.removeAll(QLatin1String{ClangProjectSettings::DelayedTemplateParsing});
+    options.removeAll(QLatin1String{ClangProjectSettings::NoDelayedTemplateParsing});
+    options.append(extraFlag);
+    m_projectSettings.setCommandLineOptions(options);
+    m_projectSettings.store();
+}
+
+void ClangProjectSettingsWidget::onClangSettingsChanged(int index)
+{
+    m_projectSettings.setUseGlobalConfig(index == 0 ? true : false);
+    m_projectSettings.store();
+    syncOtherWidgetsToComboBox();
+}
+
+void ClangProjectSettingsWidget::syncOtherWidgetsToComboBox()
+{
+    const QStringList options = m_projectSettings.commandLineOptions();
+    m_ui.delayedTemplateParse->setChecked(
+                options.contains(QLatin1String{ClangProjectSettings::DelayedTemplateParsing}));
+
+    const bool isCustom = !m_projectSettings.useGlobalConfig();
+    m_ui.generalConfigurationGroupBox->setEnabled(isCustom);
+    m_ui.diagnosticConfigurationGroupBox->setEnabled(isCustom);
+
+    refreshDiagnosticConfigsWidgetFromSettings();
+}
+
 void ClangProjectSettingsWidget::refreshDiagnosticConfigsWidgetFromSettings()
 {
-    m_diagnosticConfigWidget->refresh(
-                createConfigsModelWithGlobalProxyConfig(*CppTools::codeModelSettings()),
-                configIdForProject(m_projectSettings));
+    CppTools::ClangDiagnosticConfigsModel configsModel(
+                CppTools::codeModelSettings()->clangCustomDiagnosticConfigs());
+    m_diagnosticConfigWidget->refresh(configsModel,
+                                      configIdForProject(m_projectSettings));
 }
 
 void ClangProjectSettingsWidget::connectToCppCodeModelSettingsChanged()
diff --git a/src/plugins/clangcodemodel/clangprojectsettingswidget.h b/src/plugins/clangcodemodel/clangprojectsettingswidget.h
index 9c636edc1bbcd2ee41dcd3e2bfa2704153c9eb5c..d27be6341e80b0ad5c7956303e62220ae3568d5c 100644
--- a/src/plugins/clangcodemodel/clangprojectsettingswidget.h
+++ b/src/plugins/clangcodemodel/clangprojectsettingswidget.h
@@ -49,9 +49,12 @@ public:
 private:
     void onCurrentWarningConfigChanged(const Core::Id &currentConfigId);
     void onCustomWarningConfigsChanged(const CppTools::ClangDiagnosticConfigs &customConfigs);
+    void onDelayedTemplateParseClicked(bool);
+    void onClangSettingsChanged(int index);
     void refreshDiagnosticConfigsWidgetFromSettings();
     void connectToCppCodeModelSettingsChanged();
     void disconnectFromCppCodeModelSettingsChanged();
+    void syncOtherWidgetsToComboBox();
 
 private:
     Ui::ClangProjectSettingsWidget m_ui;
diff --git a/src/plugins/clangcodemodel/clangprojectsettingswidget.ui b/src/plugins/clangcodemodel/clangprojectsettingswidget.ui
index 085294b84065b35956417f043a442991346dcd45..997554b38b98a74863182950457f6c6ac13ccfc5 100644
--- a/src/plugins/clangcodemodel/clangprojectsettingswidget.ui
+++ b/src/plugins/clangcodemodel/clangprojectsettingswidget.ui
@@ -14,6 +14,52 @@
    </rect>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QComboBox" name="clangSettings">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <item>
+      <property name="text">
+       <string>Global</string>
+      </property>
+     </item>
+     <item>
+      <property name="text">
+       <string>Custom</string>
+      </property>
+     </item>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="generalConfigurationGroupBox">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="title">
+      <string>General</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_3">
+      <item>
+       <widget class="QCheckBox" name="delayedTemplateParse">
+        <property name="toolTip">
+         <string>Parse templates in a MSVC-compliant way. This helps to parse headers for example from Active Template Library (ATL) or Windows Runtime Library (WRL).
+However, using the relaxed and extended rules means also that no highlighting/completion can be provided within template functions.</string>
+        </property>
+        <property name="text">
+         <string>Enable MSVC-compliant template parsing</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
    <item>
     <widget class="QGroupBox" name="diagnosticConfigurationGroupBox">
      <property name="title">
diff --git a/src/plugins/cpptools/clangdiagnosticconfig.cpp b/src/plugins/cpptools/clangdiagnosticconfig.cpp
index 62d259c521d86ef11bad9df290321ad943fd5b8e..89cc76442ad1595513c448f3fbf9246c733e848b 100644
--- a/src/plugins/cpptools/clangdiagnosticconfig.cpp
+++ b/src/plugins/cpptools/clangdiagnosticconfig.cpp
@@ -47,14 +47,14 @@ void ClangDiagnosticConfig::setDisplayName(const QString &displayName)
     m_displayName = displayName;
 }
 
-QStringList ClangDiagnosticConfig::commandLineOptions() const
+QStringList ClangDiagnosticConfig::commandLineWarnings() const
 {
-    return m_commandLineOptions;
+    return m_commandLineWarnings;
 }
 
-void ClangDiagnosticConfig::setCommandLineOptions(const QStringList &options)
+void ClangDiagnosticConfig::setCommandLineWarnings(const QStringList &warnings)
 {
-    m_commandLineOptions = options;
+    m_commandLineWarnings = warnings;
 }
 
 bool ClangDiagnosticConfig::isReadOnly() const
@@ -71,7 +71,7 @@ bool ClangDiagnosticConfig::operator==(const ClangDiagnosticConfig &other) const
 {
     return m_id == other.m_id
         && m_displayName == other.m_displayName
-        && m_commandLineOptions == other.m_commandLineOptions
+        && m_commandLineWarnings == other.m_commandLineWarnings
         && m_isReadOnly == other.m_isReadOnly;
 }
 
diff --git a/src/plugins/cpptools/clangdiagnosticconfig.h b/src/plugins/cpptools/clangdiagnosticconfig.h
index 17a5a768bb4ef7556f8fabae295b897237d210ba..b9efb040b0edeaf3b622fc61fab60a27eed4d85c 100644
--- a/src/plugins/cpptools/clangdiagnosticconfig.h
+++ b/src/plugins/cpptools/clangdiagnosticconfig.h
@@ -43,8 +43,8 @@ public:
     QString displayName() const;
     void setDisplayName(const QString &displayName);
 
-    QStringList commandLineOptions() const;
-    void setCommandLineOptions(const QStringList &commandLineOptions);
+    QStringList commandLineWarnings() const;
+    void setCommandLineWarnings(const QStringList &commandLineWarnings);
 
     bool isReadOnly() const;
     void setIsReadOnly(bool isReadOnly);
@@ -54,7 +54,7 @@ public:
 private:
     Core::Id m_id;
     QString m_displayName;
-    QStringList m_commandLineOptions;
+    QStringList m_commandLineWarnings;
     bool m_isReadOnly = false;
 };
 
diff --git a/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp b/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp
index dcb09998aab99b028c90fe7e0611b57d06c8fc73..972f82c2d006bb005ac8037f5d3030a9a6654aa1 100644
--- a/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp
+++ b/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp
@@ -33,7 +33,7 @@
 
 namespace CppTools {
 
-static QStringList commonOptions()
+static QStringList commonWarnings()
 {
     return { QStringLiteral("-Wno-unknown-pragmas") };
 }
@@ -45,10 +45,10 @@ static void addConfigForQuestionableConstructs(ClangDiagnosticConfigsModel &mode
     config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
                                                       "Warnings for questionable constructs"));
     config.setIsReadOnly(true);
-    config.setCommandLineOptions(QStringList{
+    config.setCommandLineWarnings(QStringList{
         QStringLiteral("-Wall"),
         QStringLiteral("-Wextra"),
-    } + commonOptions());
+    } + commonWarnings());
 
     model.appendOrUpdate(config);
 }
@@ -60,7 +60,7 @@ static void addConfigForPedanticWarnings(ClangDiagnosticConfigsModel &model)
     config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
                                                       "Pedantic Warnings"));
     config.setIsReadOnly(true);
-    config.setCommandLineOptions(QStringList{QStringLiteral("-Wpedantic")} + commonOptions());
+    config.setCommandLineWarnings(QStringList{QStringLiteral("-Wpedantic")} + commonWarnings());
 
     model.appendOrUpdate(config);
 }
@@ -72,7 +72,7 @@ static void addConfigForAlmostEveryWarning(ClangDiagnosticConfigsModel &model)
     config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
                                                       "Warnings for almost everything"));
     config.setIsReadOnly(true);
-    config.setCommandLineOptions(QStringList{
+    config.setCommandLineWarnings(QStringList{
         QStringLiteral("-Weverything"),
         QStringLiteral("-Wno-c++98-compat"),
         QStringLiteral("-Wno-c++98-compat-pedantic"),
@@ -85,7 +85,7 @@ static void addConfigForAlmostEveryWarning(ClangDiagnosticConfigsModel &model)
         QStringLiteral("-Wno-shadow"),
         QStringLiteral("-Wno-missing-prototypes"), // Not optimal for C projects.
         QStringLiteral("-Wno-used-but-marked-unused"), // e.g. QTest::qWait
-    } + commonOptions());
+    } + commonWarnings());
 
     model.appendOrUpdate(config);
 }
diff --git a/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp b/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp
index bb3d55c3cc3e750121e4dccf05a664674b6dbde2..6b8a04ac337b36d77cbffe966b8b4f51295a1ddc 100644
--- a/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp
+++ b/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp
@@ -115,7 +115,7 @@ void ClangDiagnosticConfigsWidget::onDiagnosticOptionsEdited()
             = diagnosticOptions.trimmed().split(QLatin1Char(' '), QString::SkipEmptyParts);
 
     ClangDiagnosticConfig updatedConfig = currentConfig();
-    updatedConfig.setCommandLineOptions(updatedCommandLine);
+    updatedConfig.setCommandLineWarnings(updatedCommandLine);
 
     m_diagnosticConfigsModel.appendOrUpdate(updatedConfig);
     emit customConfigsChanged(customConfigs());
@@ -127,15 +127,6 @@ void ClangDiagnosticConfigsWidget::syncWidgetsToModel(const Core::Id &configToSe
     syncOtherWidgetsToComboBox();
 }
 
-static QString displayNameWithBuiltinIndication(const ClangDiagnosticConfig &config,
-                                                const Core::Id &exceptionalConfig)
-{
-    if (exceptionalConfig == config.id())
-        return config.displayName();
-
-    return ClangDiagnosticConfigsModel::displayNameWithBuiltinIndication(config);
-}
-
 void ClangDiagnosticConfigsWidget::syncConfigChooserToModel(const Core::Id &configToSelect)
 {
     disconnectConfigChooserCurrentIndex();
@@ -148,7 +139,7 @@ void ClangDiagnosticConfigsWidget::syncConfigChooserToModel(const Core::Id &conf
     for (int i = 0; i < size; ++i) {
         const ClangDiagnosticConfig &config = m_diagnosticConfigsModel.at(i);
         const QString displayName
-                = displayNameWithBuiltinIndication(config, m_configWithUndecoratedDisplayName);
+                = ClangDiagnosticConfigsModel::displayNameWithBuiltinIndication(config);
         m_ui->configChooserComboBox->addItem(displayName, config.id().toSetting());
 
         if (configToSelect == config.id())
@@ -176,8 +167,8 @@ void ClangDiagnosticConfigsWidget::syncOtherWidgetsToComboBox()
     m_ui->removeButton->setEnabled(!config.isReadOnly());
 
     // Update child widgets
-    const QString commandLineOptions = config.commandLineOptions().join(QLatin1Char(' '));
-    setDiagnosticOptions(commandLineOptions);
+    const QString commandLineWarnings = config.commandLineWarnings().join(QLatin1Char(' '));
+    setDiagnosticOptions(commandLineWarnings);
     m_ui->diagnosticOptionsTextEdit->setReadOnly(config.isReadOnly());
 }
 
@@ -228,11 +219,6 @@ void ClangDiagnosticConfigsWidget::disconnectDiagnosticOptionsChanged()
                this, &ClangDiagnosticConfigsWidget::onDiagnosticOptionsEdited);
 }
 
-void ClangDiagnosticConfigsWidget::setConfigWithUndecoratedDisplayName(const Core::Id &id)
-{
-    m_configWithUndecoratedDisplayName = id;
-}
-
 Core::Id ClangDiagnosticConfigsWidget::currentConfigId() const
 {
     return Core::Id::fromSetting(m_ui->configChooserComboBox->currentData());
diff --git a/src/plugins/cpptools/clangdiagnosticconfigswidget.h b/src/plugins/cpptools/clangdiagnosticconfigswidget.h
index 63480400b7047d1fb04e12947a69c6da3ef1a315..e22de1b97d03a80922df69dafd7546f0b86ea25e 100644
--- a/src/plugins/cpptools/clangdiagnosticconfigswidget.h
+++ b/src/plugins/cpptools/clangdiagnosticconfigswidget.h
@@ -50,7 +50,6 @@ public:
     Core::Id currentConfigId() const;
     ClangDiagnosticConfigs customConfigs() const;
 
-    void setConfigWithUndecoratedDisplayName(const Core::Id &id);
     void refresh(const ClangDiagnosticConfigsModel &diagnosticConfigsModel,
                  const Core::Id &configToSelect);
 
@@ -82,7 +81,6 @@ private:
 private:
     Ui::ClangDiagnosticConfigsWidget *m_ui;
     ClangDiagnosticConfigsModel m_diagnosticConfigsModel;
-    Core::Id m_configWithUndecoratedDisplayName;
 };
 
 } // CppTools namespace
diff --git a/src/plugins/cpptools/cppcodemodelsettings.cpp b/src/plugins/cpptools/cppcodemodelsettings.cpp
index a129fa61daa44dc723c49a321e8ce57fb69cbd3e..f5bb404b612741834c751ba437e095d7f301d72a 100644
--- a/src/plugins/cpptools/cppcodemodelsettings.cpp
+++ b/src/plugins/cpptools/cppcodemodelsettings.cpp
@@ -52,7 +52,7 @@ static QString clangDiagnosticConfigsArrayIdKey()
 static QString clangDiagnosticConfigsArrayDisplayNameKey()
 { return QLatin1String("displayName"); }
 
-static QString clangDiagnosticConfigsArrayOptionsKey()
+static QString clangDiagnosticConfigsArrayWarningsKey()
 { return QLatin1String("diagnosticOptions"); }
 
 static QString pchUsageKey()
@@ -78,7 +78,7 @@ void CppCodeModelSettings::fromSettings(QSettings *s)
         ClangDiagnosticConfig config;
         config.setId(Core::Id::fromSetting(s->value(clangDiagnosticConfigsArrayIdKey())));
         config.setDisplayName(s->value(clangDiagnosticConfigsArrayDisplayNameKey()).toString());
-        config.setCommandLineOptions(s->value(clangDiagnosticConfigsArrayOptionsKey()).toStringList());
+        config.setCommandLineWarnings(s->value(clangDiagnosticConfigsArrayWarningsKey()).toStringList());
         m_clangCustomDiagnosticConfigs.append(config);
     }
     s->endArray();
@@ -117,7 +117,7 @@ void CppCodeModelSettings::toSettings(QSettings *s)
         s->setArrayIndex(i);
         s->setValue(clangDiagnosticConfigsArrayIdKey(), config.id().toSetting());
         s->setValue(clangDiagnosticConfigsArrayDisplayNameKey(), config.displayName());
-        s->setValue(clangDiagnosticConfigsArrayOptionsKey(), config.commandLineOptions());
+        s->setValue(clangDiagnosticConfigsArrayWarningsKey(), config.commandLineWarnings());
     }
     s->endArray();
 
diff --git a/src/tools/clangbackend/ipcsource/projectpart.cpp b/src/tools/clangbackend/ipcsource/projectpart.cpp
index 01058c2912b678eb076eb005e75ac36588c5dc3b..4ea8db66096b1b95622d83184926b378d19912e1 100644
--- a/src/tools/clangbackend/ipcsource/projectpart.cpp
+++ b/src/tools/clangbackend/ipcsource/projectpart.cpp
@@ -60,7 +60,7 @@ ProjectPart::ProjectPart(const Utf8String &projectPartId)
 }
 
 ProjectPart::ProjectPart(const Utf8String &projectPartId,
-                         std::initializer_list<Utf8String> arguments)
+                         const Utf8StringVector &arguments)
     : d(std::make_shared<ProjectPartData>(projectPartId))
 {
     setArguments(arguments);
diff --git a/src/tools/clangbackend/ipcsource/projectpart.h b/src/tools/clangbackend/ipcsource/projectpart.h
index 0b616cc28239eec13190e7bdb7e1dc368878b708..b96089d283d5ba04ba155c7957c9c0211e271d5e 100644
--- a/src/tools/clangbackend/ipcsource/projectpart.h
+++ b/src/tools/clangbackend/ipcsource/projectpart.h
@@ -42,7 +42,7 @@ class ProjectPart
 {
 public:
     ProjectPart(const Utf8String &id = Utf8String());
-    ProjectPart(const Utf8String &id, std::initializer_list<Utf8String> arguments);
+    ProjectPart(const Utf8String &id, const Utf8StringVector &arguments);
     ProjectPart(const ProjectPartContainer &projectContainer);
     ~ProjectPart();
 
diff --git a/tests/unit/unittest/codecompletionsextractor-test.cpp b/tests/unit/unittest/codecompletionsextractor-test.cpp
index 585e9301d2fe436b9f52f891d5cc8db30fb9c26a..7c89fe58e93651dd4c5f0546c5522b6158e1f3ab 100644
--- a/tests/unit/unittest/codecompletionsextractor-test.cpp
+++ b/tests/unit/unittest/codecompletionsextractor-test.cpp
@@ -24,6 +24,7 @@
 ****************************************************************************/
 
 #include "googletest.h"
+#include "testenvironment.h"
 
 #include <clangcodecompleteresults.h>
 #include <clangdocument.h>
@@ -148,7 +149,7 @@ protected:
                                         bool needsReparse = false);
 
 protected:
-    ClangBackEnd::ProjectPart project{Utf8StringLiteral("/path/to/projectfile")};
+    ClangBackEnd::ProjectPart project{Utf8StringLiteral("/path/to/projectfile"), TestEnvironment::addPlatformArguments()};
     ClangBackEnd::ProjectParts projects;
     ClangBackEnd::UnsavedFiles unsavedFiles;
     ClangBackEnd::Documents documents{projects, unsavedFiles};
@@ -197,7 +198,7 @@ TEST_F(CodeCompletionsExtractorSlowTest, Variable)
                                          CodeCompletion::Available));
 }
 
-TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(NonTypeTemplateParameter))
+TEST_F(CodeCompletionsExtractorSlowTest, NonTypeTemplateParameter)
 {
     ClangCodeCompleteResults completeResults(getResults(variableDocument, 25, 19));
 
@@ -242,7 +243,7 @@ TEST_F(CodeCompletionsExtractorSlowTest, Field)
                                          CodeCompletion::Available));
 }
 
-TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(Class))
+TEST_F(CodeCompletionsExtractorSlowTest, Class)
 {
     ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
 
@@ -253,7 +254,7 @@ TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(Class))
                                          CodeCompletion::Available));
 }
 
-TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(Struct))
+TEST_F(CodeCompletionsExtractorSlowTest, Struct)
 {
     ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
 
@@ -264,7 +265,7 @@ TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(Struct))
                                          CodeCompletion::Available));
 }
 
-TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(Union))
+TEST_F(CodeCompletionsExtractorSlowTest, Union)
 {
     ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
 
@@ -275,7 +276,7 @@ TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(Union))
                                          CodeCompletion::Available));
 }
 
-TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(Typedef))
+TEST_F(CodeCompletionsExtractorSlowTest, Typedef)
 {
     ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
 
@@ -286,7 +287,7 @@ TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(Typedef))
                                          CodeCompletion::Available));
 }
 
-TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(UsingAsTypeAlias))
+TEST_F(CodeCompletionsExtractorSlowTest, UsingAsTypeAlias)
 {
     ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
 
@@ -297,7 +298,7 @@ TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(UsingAsTypeAlias))
                                          CodeCompletion::Available));
 }
 
-TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(TemplateTypeParameter))
+TEST_F(CodeCompletionsExtractorSlowTest, TemplateTypeParameter)
 {
     ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
 
@@ -308,7 +309,7 @@ TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(TemplateTypeParamet
                                          CodeCompletion::Available));
 }
 
-TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(TemplateClass))
+TEST_F(CodeCompletionsExtractorSlowTest, TemplateClass)
 {
     ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
 
@@ -319,7 +320,7 @@ TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(TemplateClass))
                                          CodeCompletion::Available));
 }
 
-TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(TemplateTemplateParameter))
+TEST_F(CodeCompletionsExtractorSlowTest, TemplateTemplateParameter)
 {
     ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
 
@@ -330,7 +331,7 @@ TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(TemplateTemplatePar
                                          CodeCompletion::Available));
 }
 
-TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(ClassTemplatePartialSpecialization))
+TEST_F(CodeCompletionsExtractorSlowTest, ClassTemplatePartialSpecialization)
 {
     ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
 
@@ -659,7 +660,7 @@ TEST_F(CodeCompletionsExtractorSlowTest, CompletionChunksEnumeration)
                                                CodeCompletionChunks({{CodeCompletionChunk::TypedText, Utf8StringLiteral("Enumeration")}})));
 }
 
-TEST_F(CodeCompletionsExtractorSlowTest, DISABLED_ON_WINDOWS(CompletionChunksClass))
+TEST_F(CodeCompletionsExtractorSlowTest, CompletionChunksClass)
 {
     ClangCodeCompleteResults completeResults(getResults(classDocument, 20));
 
diff --git a/tests/unit/unittest/cursor-test.cpp b/tests/unit/unittest/cursor-test.cpp
index f6b87c1243993edb8d9784a4d34857ebe3fe61bf..78913d7c20dd5928f14f83fc4498315302dd0213 100644
--- a/tests/unit/unittest/cursor-test.cpp
+++ b/tests/unit/unittest/cursor-test.cpp
@@ -26,6 +26,7 @@
 #include "googletest.h"
 
 #include "clangcompareoperators.h"
+#include "testenvironment.h"
 
 #include <clangdocument.h>
 #include <clangdocuments.h>
@@ -66,7 +67,7 @@ struct Data {
     Utf8String filePath{Utf8StringLiteral(TESTDATA_DIR"/cursor.cpp")};
     Document document{filePath,
                       ProjectPart(Utf8StringLiteral("projectPartId"),
-                                 {Utf8StringLiteral("-std=c++11")}),
+                                  TestEnvironment::addPlatformArguments({Utf8StringLiteral("-std=c++11")})),
                       {},
                       documents};
     TranslationUnit translationUnit{filePath,
@@ -395,7 +396,7 @@ TEST_F(Cursor, IsLocalVariableInStaticFunction)
     ASSERT_TRUE(cursor.isLocalVariable());
 }
 
-TEST_F(Cursor, DISABLED_ON_WINDOWS(IsLocalVariableInTemplateFunction))
+TEST_F(Cursor, IsLocalVariableInTemplateFunction)
 {
     auto cursor = translationUnit.cursorAt(52, 7);
 
diff --git a/tests/unit/unittest/diagnostic-test.cpp b/tests/unit/unittest/diagnostic-test.cpp
index d53800f571372cd99564e15c8862c3cdaa90ab9d..24de9e41192f930df5e97905e622fd20d8e27743 100644
--- a/tests/unit/unittest/diagnostic-test.cpp
+++ b/tests/unit/unittest/diagnostic-test.cpp
@@ -25,6 +25,7 @@
 
 #include "googletest.h"
 #include "diagnosticcontainer-matcher.h"
+#include "testenvironment.h"
 
 #include <diagnostic.h>
 #include <diagnosticcontainer.h>
@@ -95,7 +96,8 @@ struct Data {
         d.reset(new DiagnosticData(document));
     }
 
-    ProjectPart projectPart{Utf8StringLiteral("projectPartId"), {Utf8StringLiteral("-std=c++11")}};
+    ProjectPart projectPart{Utf8StringLiteral("projectPartId"),
+                            TestEnvironment::addPlatformArguments({Utf8StringLiteral("-std=c++11")})};
     ClangBackEnd::ProjectParts projects;
     ClangBackEnd::UnsavedFiles unsavedFiles;
     ClangBackEnd::Documents documents{projects, unsavedFiles};
diff --git a/tests/unit/unittest/diagnosticset-test.cpp b/tests/unit/unittest/diagnosticset-test.cpp
index c7b04cb8ab04e21c6cc97aed230062113615efa9..007c8d2f5f63b82b47b7ba10c271cc08e6605b00 100644
--- a/tests/unit/unittest/diagnosticset-test.cpp
+++ b/tests/unit/unittest/diagnosticset-test.cpp
@@ -25,6 +25,7 @@
 
 #include "googletest.h"
 #include "diagnosticcontainer-matcher.h"
+#include "testenvironment.h"
 
 #include <clangbackendipc_global.h>
 #include <clangdocument.h>
@@ -63,7 +64,8 @@ const Utf8String headerFilePath = Utf8StringLiteral(TESTDATA_DIR"/diagnostic_dia
 class DiagnosticSet : public ::testing::Test
 {
 protected:
-    ProjectPart projectPart{Utf8StringLiteral("projectPartId"), {Utf8StringLiteral("-pedantic")}};
+    ProjectPart projectPart{Utf8StringLiteral("projectPartId"),
+                TestEnvironment::addPlatformArguments({Utf8StringLiteral("-pedantic")})};
     ClangBackEnd::ProjectParts projects;
     ClangBackEnd::UnsavedFiles unsavedFiles;
     ClangBackEnd::Documents documents{projects, unsavedFiles};
diff --git a/tests/unit/unittest/highlightingmarks-test.cpp b/tests/unit/unittest/highlightingmarks-test.cpp
index 4cecb620fc80222a376ea290bf9cb73459f15b86..faddd879579e2dc666ca6c3abf4118e72c67b36e 100644
--- a/tests/unit/unittest/highlightingmarks-test.cpp
+++ b/tests/unit/unittest/highlightingmarks-test.cpp
@@ -24,6 +24,7 @@
 ****************************************************************************/
 
 #include "googletest.h"
+#include "testenvironment.h"
 
 #include <clangdocument.h>
 #include <clangdocuments.h>
@@ -107,7 +108,8 @@ struct Data {
     Utf8String filePath{Utf8StringLiteral(TESTDATA_DIR"/highlightingmarks.cpp")};
     Document document{filePath,
                       ProjectPart(Utf8StringLiteral("projectPartId"),
-                                  {Utf8StringLiteral("-std=c++14"), Utf8StringLiteral("-I" TESTDATA_DIR)}),
+                                  TestEnvironment::addPlatformArguments({Utf8StringLiteral("-std=c++14"),
+                                                                         Utf8StringLiteral("-I" TESTDATA_DIR)})),
                       {},
                       documents};
     TranslationUnit translationUnit{filePath,
@@ -676,49 +678,49 @@ TEST_F(HighlightingMarks, TemplateFunctionDeclaration)
     ASSERT_THAT(infos[1], HasOnlyType(HighlightingType::Function));
 }
 
-TEST_F(HighlightingMarks, DISABLED_ON_WINDOWS(TemplateTypeParameterReference))
+TEST_F(HighlightingMarks, TemplateTypeParameterReference)
 {
     const auto infos = translationUnit.highlightingMarksInRange(sourceRange(268, 58));
 
     ASSERT_THAT(infos[0], HasOnlyType(HighlightingType::Type));
 }
 
-TEST_F(HighlightingMarks, DISABLED_ON_WINDOWS(TemplateTypeParameterDeclarationReference))
+TEST_F(HighlightingMarks, TemplateTypeParameterDeclarationReference)
 {
     const auto infos = translationUnit.highlightingMarksInRange(sourceRange(268, 58));
 
     ASSERT_THAT(infos[1], HasOnlyType(HighlightingType::LocalVariable));
 }
 
-TEST_F(HighlightingMarks, DISABLED_ON_WINDOWS(NonTypeTemplateParameterReference))
+TEST_F(HighlightingMarks, NonTypeTemplateParameterReference)
 {
     const auto infos = translationUnit.highlightingMarksInRange(sourceRange(269, 71));
 
     ASSERT_THAT(infos[3], HasOnlyType(HighlightingType::LocalVariable));
 }
 
-TEST_F(HighlightingMarks, DISABLED_ON_WINDOWS(NonTypeTemplateParameterReferenceReference))
+TEST_F(HighlightingMarks, NonTypeTemplateParameterReferenceReference)
 {
     const auto infos = translationUnit.highlightingMarksInRange(sourceRange(269, 71));
 
     ASSERT_THAT(infos[1], HasOnlyType(HighlightingType::LocalVariable));
 }
 
-TEST_F(HighlightingMarks, DISABLED_ON_WINDOWS(TemplateTemplateParameterReference))
+TEST_F(HighlightingMarks, TemplateTemplateParameterReference)
 {
     const auto infos = translationUnit.highlightingMarksInRange(sourceRange(270, 89));
 
     ASSERT_THAT(infos[0], HasOnlyType(HighlightingType::Type));
 }
 
-TEST_F(HighlightingMarks, DISABLED_ON_WINDOWS(TemplateTemplateContainerParameterReference))
+TEST_F(HighlightingMarks, TemplateTemplateContainerParameterReference)
 {
     const auto infos = translationUnit.highlightingMarksInRange(sourceRange(270, 89));
 
     ASSERT_THAT(infos[2], HasOnlyType(HighlightingType::Type));
 }
 
-TEST_F(HighlightingMarks, DISABLED_ON_WINDOWS(TemplateTemplateParameterReferenceVariable))
+TEST_F(HighlightingMarks, TemplateTemplateParameterReferenceVariable)
 {
     const auto infos = translationUnit.highlightingMarksInRange(sourceRange(270, 89));
 
diff --git a/tests/unit/unittest/highlightingmarksreporter-test.cpp b/tests/unit/unittest/highlightingmarksreporter-test.cpp
index ec9760a10f1316e9be40d47d7f41407c0bcb0818..f153ba3472be4e3cddca2292666512de3bdf4f14 100644
--- a/tests/unit/unittest/highlightingmarksreporter-test.cpp
+++ b/tests/unit/unittest/highlightingmarksreporter-test.cpp
@@ -24,6 +24,7 @@
 ****************************************************************************/
 
 #include "googletest.h"
+#include "testenvironment.h"
 
 #include <chunksreportedmonitor.h>
 #include <clangdocument.h>
@@ -55,7 +56,7 @@ struct Data {
     Documents documents{projects, unsavedFiles};
     Document document{Utf8StringLiteral(TESTDATA_DIR"/highlightingmarks.cpp"),
                       ProjectPart(Utf8StringLiteral("projectPartId"),
-                                  {Utf8StringLiteral("-std=c++14")}),
+                                  TestEnvironment::addPlatformArguments({Utf8StringLiteral("-std=c++14")})),
                       {},
                       documents};
 };
diff --git a/tests/unit/unittest/skippedsourceranges-test.cpp b/tests/unit/unittest/skippedsourceranges-test.cpp
index fdf995ab840204fdb0e76ce8674c956fa36fe7fb..c74dfa828b2cc52dda5b5d79143aca570d9fad24 100644
--- a/tests/unit/unittest/skippedsourceranges-test.cpp
+++ b/tests/unit/unittest/skippedsourceranges-test.cpp
@@ -24,6 +24,7 @@
 ****************************************************************************/
 
 #include "googletest.h"
+#include "testenvironment.h"
 
 #include <cursor.h>
 #include <clangdocument.h>
@@ -94,8 +95,8 @@ struct Data {
     Utf8String filePath = Utf8StringLiteral(TESTDATA_DIR"/skippedsourceranges.cpp");
     Document document{filePath,
                       ProjectPart(Utf8StringLiteral("projectPartId"),
-                                 {Utf8StringLiteral("-std=c++11"),
-                                  Utf8StringLiteral("-DBLAH")}),
+                                 TestEnvironment::addPlatformArguments({Utf8StringLiteral("-std=c++11"),
+                                                                        Utf8StringLiteral("-DBLAH")})),
                       {},
                       documents};
     TranslationUnit translationUnit{filePath,
diff --git a/tests/unit/unittest/sourcerange-test.cpp b/tests/unit/unittest/sourcerange-test.cpp
index 2b20c4029dc5f8a6c688a4c8245478ca60566257..5665b46573e4a5cb4e91deb5366941339589bd5b 100644
--- a/tests/unit/unittest/sourcerange-test.cpp
+++ b/tests/unit/unittest/sourcerange-test.cpp
@@ -24,6 +24,7 @@
 ****************************************************************************/
 
 #include "googletest.h"
+#include "testenvironment.h"
 
 #include <clangtranslationunit.h>
 #include <diagnostic.h>
@@ -93,7 +94,8 @@ struct Data {
         d.reset(new SourceRangeData(document));
     }
 
-    ProjectPart projectPart{Utf8StringLiteral("projectPartId"), {Utf8StringLiteral("-pedantic")}};
+    ProjectPart projectPart{Utf8StringLiteral("projectPartId"),
+                            TestEnvironment::addPlatformArguments({Utf8StringLiteral("-pedantic")})};
     ClangBackEnd::ProjectParts projects;
     ClangBackEnd::UnsavedFiles unsavedFiles;
     ClangBackEnd::Documents documents{projects, unsavedFiles};
diff --git a/tests/unit/unittest/testenvironment.h b/tests/unit/unittest/testenvironment.h
index a071b45432dcf4154d9aef06969c04359d5217e9..8b6ef897100684b50679f10918a0a1d3f1c5c14b 100644
--- a/tests/unit/unittest/testenvironment.h
+++ b/tests/unit/unittest/testenvironment.h
@@ -27,7 +27,11 @@
 
 #include <environment.h>
 
+#include <utf8string.h>
+#include <utils/hostosinfo.h>
+
 #include <QTemporaryDir>
+#include <QVector>
 
 class TestEnvironment final : public ClangBackEnd::Environment
 {
@@ -50,6 +54,14 @@ public:
         return 2;
     }
 
+    static QVector<Utf8String> addPlatformArguments(std::initializer_list<Utf8String> arguments = {})
+    {
+        QVector<Utf8String> result{arguments};
+        if (Utils::HostOsInfo::isWindowsHost())
+            result.append(Utf8StringLiteral("-fno-delayed-template-parsing"));
+        return result;
+    }
+
 private:
     QTemporaryDir temporaryDirectory;
 };