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 Macros macros = msvcPredefinedMacros(filteredFlags, env);
|
||||||
|
|
||||||
const auto report = MacroInspectionReport{macros, languageVersion(macros)};
|
const auto report = MacroInspectionReport{macros, msvcLanguageVersion(lang, macros)};
|
||||||
macroCache->insert(filteredFlags, report);
|
macroCache->insert(filteredFlags, report);
|
||||||
|
|
||||||
return report;
|
return report;
|
||||||
|
@@ -98,7 +98,8 @@ protected:
|
|||||||
// Function must be thread-safe!
|
// Function must be thread-safe!
|
||||||
virtual Macros msvcPredefinedMacros(const QStringList cxxflags,
|
virtual Macros msvcPredefinedMacros(const QStringList cxxflags,
|
||||||
const Utils::Environment& env) const = 0;
|
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;
|
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.
|
// 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;
|
int mscVer = -1;
|
||||||
QByteArray msvcLang;
|
QByteArray msvcLang;
|
||||||
for (const ProjectExplorer::Macro ¯o : macros) {
|
for (const ProjectExplorer::Macro ¯o : macros) {
|
||||||
@@ -538,7 +538,7 @@ LanguageVersion MsvcToolChain::languageVersion(const Macros ¯os) const
|
|||||||
}
|
}
|
||||||
QTC_CHECK(mscVer > 0);
|
QTC_CHECK(mscVer > 0);
|
||||||
|
|
||||||
if (lang == Constants::CXX_LANGUAGE_ID) {
|
if (language == Constants::CXX_LANGUAGE_ID) {
|
||||||
if (!msvcLang.isEmpty()) // >= Visual Studio 2015 Update 3
|
if (!msvcLang.isEmpty()) // >= Visual Studio 2015 Update 3
|
||||||
return ToolChain::cxxLanguageVersion(msvcLang);
|
return ToolChain::cxxLanguageVersion(msvcLang);
|
||||||
if (mscVer >= 1800) // >= Visual Studio 2013 (12.0)
|
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)
|
if (mscVer >= 1600) // >= Visual Studio 2010 (10.0)
|
||||||
return LanguageVersion::CXX11;
|
return LanguageVersion::CXX11;
|
||||||
return LanguageVersion::CXX98;
|
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)
|
if (mscVer >= 1910) // >= Visual Studio 2017 RTW (15.0)
|
||||||
return LanguageVersion::C11;
|
return LanguageVersion::C11;
|
||||||
return LanguageVersion::C99;
|
return LanguageVersion::C99;
|
||||||
@@ -1134,9 +1134,10 @@ Macros ClangClToolChain::msvcPredefinedMacros(const QStringList cxxflags,
|
|||||||
return Macro::toMacros(response.allRawOutput());
|
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!
|
// Function must be thread-safe!
|
||||||
Macros msvcPredefinedMacros(const QStringList cxxflags,
|
Macros msvcPredefinedMacros(const QStringList cxxflags,
|
||||||
const Utils::Environment &env) const override;
|
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:
|
private:
|
||||||
struct GenerateEnvResult
|
struct GenerateEnvResult
|
||||||
@@ -139,7 +140,8 @@ public:
|
|||||||
void resetMsvcToolChain(const MsvcToolChain *base = nullptr);
|
void resetMsvcToolChain(const MsvcToolChain *base = nullptr);
|
||||||
Macros msvcPredefinedMacros(const QStringList cxxflags,
|
Macros msvcPredefinedMacros(const QStringList cxxflags,
|
||||||
const Utils::Environment &env) const override;
|
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;
|
bool operator ==(const ToolChain &) const override;
|
||||||
private:
|
private:
|
||||||
|
Reference in New Issue
Block a user