forked from qt-creator/qt-creator
ProjectExplorer/MSVC: Fix thread-unsafe call
The runner created in AbstractMsvcToolChain::createMacroInspectionRunner() called indirectly back into the not thread-safe ToolChain::language(). This call is not needed as we already have the language at hand. Change-Id: I2d55bdfa19f1c05447b6dd12afde5b5fa006d9e2 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io> Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -129,7 +129,7 @@ ToolChain::MacroInspectionRunner AbstractMsvcToolChain::createMacroInspectionRun
|
||||
|
||||
const Macros macros = msvcPredefinedMacros(filteredFlags, env);
|
||||
|
||||
const auto report = MacroInspectionReport{macros, languageVersion(macros)};
|
||||
const auto report = MacroInspectionReport{macros, msvcLanguageVersion(lang, macros)};
|
||||
macroCache->insert(filteredFlags, report);
|
||||
|
||||
return report;
|
||||
|
@@ -98,7 +98,8 @@ protected:
|
||||
// Function must be thread-safe!
|
||||
virtual Macros msvcPredefinedMacros(const QStringList cxxflags,
|
||||
const Utils::Environment& env) const = 0;
|
||||
virtual LanguageVersion languageVersion(const Macros ¯os) const = 0;
|
||||
virtual LanguageVersion msvcLanguageVersion(const Core::Id &language,
|
||||
const Macros ¯os) const = 0;
|
||||
|
||||
Utils::FileName m_debuggerCommand;
|
||||
|
||||
|
@@ -525,9 +525,9 @@ 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::languageVersion(const Macros ¯os) const
|
||||
LanguageVersion MsvcToolChain::msvcLanguageVersion(const Core::Id &language,
|
||||
const Macros ¯os) const
|
||||
{
|
||||
const Core::Id lang = language();
|
||||
int mscVer = -1;
|
||||
QByteArray msvcLang;
|
||||
for (const ProjectExplorer::Macro ¯o : macros) {
|
||||
@@ -538,7 +538,7 @@ LanguageVersion MsvcToolChain::languageVersion(const Macros ¯os) const
|
||||
}
|
||||
QTC_CHECK(mscVer > 0);
|
||||
|
||||
if (lang == Constants::CXX_LANGUAGE_ID) {
|
||||
if (language == Constants::CXX_LANGUAGE_ID) {
|
||||
if (!msvcLang.isEmpty()) // >= Visual Studio 2015 Update 3
|
||||
return ToolChain::cxxLanguageVersion(msvcLang);
|
||||
if (mscVer >= 1800) // >= Visual Studio 2013 (12.0)
|
||||
@@ -546,7 +546,7 @@ LanguageVersion MsvcToolChain::languageVersion(const Macros ¯os) const
|
||||
if (mscVer >= 1600) // >= Visual Studio 2010 (10.0)
|
||||
return LanguageVersion::CXX11;
|
||||
return LanguageVersion::CXX98;
|
||||
} else if (lang == Constants::C_LANGUAGE_ID) {
|
||||
} else if (language == Constants::C_LANGUAGE_ID) {
|
||||
if (mscVer >= 1910) // >= Visual Studio 2017 RTW (15.0)
|
||||
return LanguageVersion::C11;
|
||||
return LanguageVersion::C99;
|
||||
@@ -1134,9 +1134,10 @@ Macros ClangClToolChain::msvcPredefinedMacros(const QStringList cxxflags,
|
||||
return Macro::toMacros(response.allRawOutput());
|
||||
}
|
||||
|
||||
LanguageVersion ClangClToolChain::languageVersion(const Macros ¯os) const
|
||||
LanguageVersion ClangClToolChain::msvcLanguageVersion(const Core::Id &language,
|
||||
const Macros ¯os) const
|
||||
{
|
||||
return ToolChain::languageVersion(language(), macros);
|
||||
return ToolChain::languageVersion(language, macros);
|
||||
}
|
||||
|
||||
// --------------------------------------------------------------------------
|
||||
|
@@ -94,7 +94,8 @@ protected:
|
||||
// Function must be thread-safe!
|
||||
Macros msvcPredefinedMacros(const QStringList cxxflags,
|
||||
const Utils::Environment &env) const override;
|
||||
LanguageVersion languageVersion(const Macros ¯os) const override;
|
||||
LanguageVersion msvcLanguageVersion(const Core::Id &language,
|
||||
const Macros ¯os) const override;
|
||||
|
||||
private:
|
||||
struct GenerateEnvResult
|
||||
@@ -139,7 +140,8 @@ public:
|
||||
void resetMsvcToolChain(const MsvcToolChain *base = nullptr);
|
||||
Macros msvcPredefinedMacros(const QStringList cxxflags,
|
||||
const Utils::Environment &env) const override;
|
||||
LanguageVersion languageVersion(const Macros ¯os) const override;
|
||||
LanguageVersion msvcLanguageVersion(const Core::Id &language,
|
||||
const Macros ¯os) const override;
|
||||
|
||||
bool operator ==(const ToolChain &) const override;
|
||||
private:
|
||||
|
Reference in New Issue
Block a user