diff --git a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp index 33861c36815..0aea9695b47 100644 --- a/src/plugins/projectexplorer/abstractmsvctoolchain.cpp +++ b/src/plugins/projectexplorer/abstractmsvctoolchain.cpp @@ -129,7 +129,8 @@ ToolChain::MacroInspectionRunner AbstractMsvcToolChain::createMacroInspectionRun const Macros macros = msvcPredefinedMacros(filteredFlags, env); - const auto report = MacroInspectionReport{macros, msvcLanguageVersion(lang, macros)}; + const auto report = MacroInspectionReport{macros, + msvcLanguageVersion(filteredFlags, lang, macros)}; macroCache->insert(filteredFlags, report); return report; diff --git a/src/plugins/projectexplorer/abstractmsvctoolchain.h b/src/plugins/projectexplorer/abstractmsvctoolchain.h index 8fc7c46be50..f1f74ec8a17 100644 --- a/src/plugins/projectexplorer/abstractmsvctoolchain.h +++ b/src/plugins/projectexplorer/abstractmsvctoolchain.h @@ -98,7 +98,8 @@ protected: // Function must be thread-safe! virtual Macros msvcPredefinedMacros(const QStringList cxxflags, const Utils::Environment& env) const = 0; - virtual LanguageVersion msvcLanguageVersion(const Core::Id &language, + virtual LanguageVersion msvcLanguageVersion(const QStringList cxxflags, + const Core::Id &language, const Macros ¯os) const = 0; Utils::FileName m_debuggerCommand; diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index 5defb0b7449..020247b3cb7 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -525,7 +525,8 @@ Macros MsvcToolChain::msvcPredefinedMacros(const QStringList cxxflags, // // For _MSV_VER values, see https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=vs-2017. // -LanguageVersion MsvcToolChain::msvcLanguageVersion(const Core::Id &language, +LanguageVersion MsvcToolChain::msvcLanguageVersion(const QStringList /*cxxflags*/, + const Core::Id &language, const Macros ¯os) const { int mscVer = -1; @@ -1120,6 +1121,9 @@ bool ClangClToolChain::operator ==(const ToolChain &other) const Macros ClangClToolChain::msvcPredefinedMacros(const QStringList cxxflags, const Utils::Environment &env) const { + if (!cxxflags.contains("--driver-mode=g++")) + return MsvcToolChain::msvcPredefinedMacros(cxxflags, env); + Utils::SynchronousProcess cpp; cpp.setEnvironment(env.toStringList()); cpp.setWorkingDirectory(Utils::TemporaryDirectory::masterDirectoryPath()); @@ -1138,10 +1142,13 @@ Macros ClangClToolChain::msvcPredefinedMacros(const QStringList cxxflags, return Macro::toMacros(response.allRawOutput()); } -LanguageVersion ClangClToolChain::msvcLanguageVersion(const Core::Id &language, +LanguageVersion ClangClToolChain::msvcLanguageVersion(const QStringList cxxflags, + const Core::Id &language, const Macros ¯os) const { - return ToolChain::languageVersion(language, macros); + if (cxxflags.contains("--driver-mode=g++")) + return ToolChain::languageVersion(language, macros); + return MsvcToolChain::msvcLanguageVersion(cxxflags, language, macros); } // -------------------------------------------------------------------------- diff --git a/src/plugins/projectexplorer/msvctoolchain.h b/src/plugins/projectexplorer/msvctoolchain.h index 73c683daf96..b6a205e83bd 100644 --- a/src/plugins/projectexplorer/msvctoolchain.h +++ b/src/plugins/projectexplorer/msvctoolchain.h @@ -94,7 +94,8 @@ protected: // Function must be thread-safe! Macros msvcPredefinedMacros(const QStringList cxxflags, const Utils::Environment &env) const override; - LanguageVersion msvcLanguageVersion(const Core::Id &language, + LanguageVersion msvcLanguageVersion(const QStringList cxxflags, + const Core::Id &language, const Macros ¯os) const override; struct GenerateEnvResult @@ -141,7 +142,8 @@ public: void resetMsvcToolChain(const MsvcToolChain *base = nullptr); Macros msvcPredefinedMacros(const QStringList cxxflags, const Utils::Environment &env) const override; - LanguageVersion msvcLanguageVersion(const Core::Id &language, + LanguageVersion msvcLanguageVersion(const QStringList cxxflags, + const Core::Id &language, const Macros ¯os) const override; bool operator ==(const ToolChain &) const override;