diff --git a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp index c632dc7a08d..2d955e255ad 100644 --- a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp +++ b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp @@ -82,7 +82,9 @@ ClangStaticAnalyzerRunControl::ClangStaticAnalyzerRunControl( ToolChain *toolChain = ToolChainKitInformation::toolChain(target->kit()); QTC_ASSERT(toolChain, return); - m_extraToolChainInfo.wordWidth = runConfiguration->abi().wordWidth(); + Abi abi = runConfiguration->abi(); + m_extraToolChainInfo.wordWidth = abi.wordWidth(); + m_extraToolChainInfo.isMsvc2015 = abi.osFlavor() == Abi::WindowsMsvc2015Flavor; m_extraToolChainInfo.targetTriple = toolChain->originalTargetTriple(); } @@ -140,6 +142,14 @@ QStringList inputAndOutputArgumentsRemoved(const QString &inputFile, const QStri return newArguments; } +static void appendMsCompatibility2015OptionForMsvc2015(QStringList *arguments, bool isMsvc2015) +{ + QTC_ASSERT(arguments, return); + + if (isMsvc2015) + arguments->append(QLatin1String("-fms-compatibility-version=19")); +} + static QStringList tweakedArguments(const QString &filePath, const QStringList &arguments, const ExtraToolChainInfo &extraParams) @@ -147,6 +157,7 @@ static QStringList tweakedArguments(const QString &filePath, QStringList newArguments = inputAndOutputArgumentsRemoved(filePath, arguments); prependWordWidthArgumentIfNotIncluded(&newArguments, extraParams.wordWidth); prependTargetTripleIfNotIncludedAndNotEmpty(&newArguments, extraParams.targetTriple); + appendMsCompatibility2015OptionForMsvc2015(&newArguments, extraParams.isMsvc2015); return newArguments; } @@ -199,6 +210,7 @@ public: QStringList options = optionsBuilder.options(); prependWordWidthArgumentIfNotIncluded(&options, extraParams.wordWidth); prependTargetTripleIfNotIncludedAndNotEmpty(&options, extraParams.targetTriple); + appendMsCompatibility2015OptionForMsvc2015(&options, extraParams.isMsvc2015); return options; } diff --git a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.h b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.h index 525b2a351d2..c05a5714fd3 100644 --- a/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.h +++ b/src/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.h @@ -51,6 +51,7 @@ typedef QList AnalyzeUnits; struct ExtraToolChainInfo { unsigned char wordWidth = 0; QString targetTriple; + bool isMsvc2015 = false; }; class ClangStaticAnalyzerRunControl : public Debugger::AnalyzerRunControl