forked from qt-creator/qt-creator
ProjectExplorer: Do not detect clang-cl executables more than once
This fixes soft asserts in ToolchainManager. Change-Id: I629d57ae51fab90874b00685494c9aa1c49ef86d Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -1623,9 +1623,8 @@ static Toolchains detectClangClToolChainInPath(const FilePath &clangClPath,
|
|||||||
.arg(QLatin1String(isDefault ? "Default " : ""))
|
.arg(QLatin1String(isDefault ? "Default " : ""))
|
||||||
.arg(targetAbi.wordWidth())
|
.arg(targetAbi.wordWidth())
|
||||||
.arg(Abi::toString(targetAbi.osFlavor()).toUpper());
|
.arg(Abi::toString(targetAbi.osFlavor()).toUpper());
|
||||||
for (auto language : {Id(Constants::C_LANGUAGE_ID), Id(Constants::CXX_LANGUAGE_ID)}) {
|
for (const Id language : {Id(Constants::C_LANGUAGE_ID), Id(Constants::CXX_LANGUAGE_ID)}) {
|
||||||
ClangClToolchain *tc = static_cast<ClangClToolchain *>(
|
if (Utils::findOrDefault(alreadyKnown, [&](Toolchain *tc) {
|
||||||
Utils::findOrDefault(alreadyKnown, [&](Toolchain *tc) -> bool {
|
|
||||||
if (tc->typeId() != Constants::CLANG_CL_TOOLCHAIN_TYPEID)
|
if (tc->typeId() != Constants::CLANG_CL_TOOLCHAIN_TYPEID)
|
||||||
return false;
|
return false;
|
||||||
if (tc->targetAbi() != targetAbi)
|
if (tc->targetAbi() != targetAbi)
|
||||||
@@ -1633,18 +1632,17 @@ static Toolchains detectClangClToolChainInPath(const FilePath &clangClPath,
|
|||||||
if (tc->language() != language)
|
if (tc->language() != language)
|
||||||
return false;
|
return false;
|
||||||
return tc->compilerCommand().isSameExecutable(clangClPath);
|
return tc->compilerCommand().isSameExecutable(clangClPath);
|
||||||
}));
|
})) {
|
||||||
if (tc) {
|
continue;
|
||||||
res << tc;
|
|
||||||
} else {
|
|
||||||
auto cltc = new ClangClToolchain;
|
|
||||||
cltc->setClangPath(clangClPath);
|
|
||||||
cltc->setDisplayName(name);
|
|
||||||
cltc->setDetection(Toolchain::AutoDetection);
|
|
||||||
cltc->setLanguage(language);
|
|
||||||
cltc->setupVarsBat(toolChain->targetAbi(), toolChain->varsBat(), toolChain->varsBatArg());
|
|
||||||
res << cltc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto cltc = new ClangClToolchain;
|
||||||
|
cltc->setClangPath(clangClPath);
|
||||||
|
cltc->setDisplayName(name);
|
||||||
|
cltc->setDetection(Toolchain::AutoDetection);
|
||||||
|
cltc->setLanguage(language);
|
||||||
|
cltc->setupVarsBat(toolChain->targetAbi(), toolChain->varsBat(), toolChain->varsBatArg());
|
||||||
|
res << cltc;
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user