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:
Christian Kandeler
2024-10-21 15:18:58 +02:00
parent c00ce6341b
commit fbaff902b8

View File

@@ -1623,9 +1623,8 @@ static Toolchains detectClangClToolChainInPath(const FilePath &clangClPath,
.arg(QLatin1String(isDefault ? "Default " : ""))
.arg(targetAbi.wordWidth())
.arg(Abi::toString(targetAbi.osFlavor()).toUpper());
for (auto language : {Id(Constants::C_LANGUAGE_ID), Id(Constants::CXX_LANGUAGE_ID)}) {
ClangClToolchain *tc = static_cast<ClangClToolchain *>(
Utils::findOrDefault(alreadyKnown, [&](Toolchain *tc) -> bool {
for (const Id language : {Id(Constants::C_LANGUAGE_ID), Id(Constants::CXX_LANGUAGE_ID)}) {
if (Utils::findOrDefault(alreadyKnown, [&](Toolchain *tc) {
if (tc->typeId() != Constants::CLANG_CL_TOOLCHAIN_TYPEID)
return false;
if (tc->targetAbi() != targetAbi)
@@ -1633,10 +1632,10 @@ static Toolchains detectClangClToolChainInPath(const FilePath &clangClPath,
if (tc->language() != language)
return false;
return tc->compilerCommand().isSameExecutable(clangClPath);
}));
if (tc) {
res << tc;
} else {
})) {
continue;
}
auto cltc = new ClangClToolchain;
cltc->setClangPath(clangClPath);
cltc->setDisplayName(name);
@@ -1645,7 +1644,6 @@ static Toolchains detectClangClToolChainInPath(const FilePath &clangClPath,
cltc->setupVarsBat(toolChain->targetAbi(), toolChain->varsBat(), toolChain->varsBatArg());
res << cltc;
}
}
return res;
}