From d6125816678fb1b84b02456bb3f6602740a2499a Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 13 Mar 2023 15:02:03 +0100 Subject: [PATCH] ClangTools: Fix include path retrieval This seems to have silently broken ages ago, perhaps when run workers were introduced: The clang tools' run controls no longer hold the executable, so we passed an empty file path to the function that was supposed to retrieve the include path, which in turn gave us compile- time values as a fallback. Change-Id: Ie275dab93e4a4ed551c3c8fcd604cd37a3b7bd0e Reviewed-by: hjk --- src/plugins/clangtools/clangtoolruncontrol.cpp | 13 ++++++------- src/plugins/clangtools/executableinfo.cpp | 1 + 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/plugins/clangtools/clangtoolruncontrol.cpp b/src/plugins/clangtools/clangtoolruncontrol.cpp index c684774ef8d..7881b53916f 100644 --- a/src/plugins/clangtools/clangtoolruncontrol.cpp +++ b/src/plugins/clangtools/clangtoolruncontrol.cpp @@ -165,24 +165,23 @@ void ClangToolRunWorker::start() .arg(toolName, projectFile.toUserOutput(), m_diagnosticConfig.displayName()), Utils::NormalMessageFormat); - // Collect files - const auto [includeDir, clangVersion] - = getClangIncludeDirAndVersion(runControl()->commandLine().executable()); + const ClangToolType tool = m_tool == ClangTidyTool::instance() ? ClangToolType::Tidy + : ClangToolType::Clazy; + const FilePath executable = toolExecutable(tool); + const auto [includeDir, clangVersion] = getClangIncludeDirAndVersion(executable); + // Collect files AnalyzeUnits unitsToProcess; for (const FileInfo &fileInfo : m_fileInfos) unitsToProcess.append({fileInfo, includeDir, clangVersion}); - qCDebug(LOG) << Q_FUNC_INFO << runControl()->commandLine().executable() - << includeDir << clangVersion; + qCDebug(LOG) << Q_FUNC_INFO << executable << includeDir << clangVersion; qCDebug(LOG) << "Files to process:" << unitsToProcess; qCDebug(LOG) << "Environment:" << m_environment; m_filesAnalyzed.clear(); m_filesNotAnalyzed.clear(); - const ClangToolType tool = m_tool == ClangTidyTool::instance() ? ClangToolType::Tidy - : ClangToolType::Clazy; using namespace Tasking; QList tasks{ParallelLimit(qMax(1, m_runSettings.parallelJobs()))}; for (const AnalyzeUnit &unit : std::as_const(unitsToProcess)) { diff --git a/src/plugins/clangtools/executableinfo.cpp b/src/plugins/clangtools/executableinfo.cpp index 643b7afe00c..1e280a68894 100644 --- a/src/plugins/clangtools/executableinfo.cpp +++ b/src/plugins/clangtools/executableinfo.cpp @@ -225,6 +225,7 @@ static QPair clangIncludeDirAndVersion(const FilePath &clangT QPair getClangIncludeDirAndVersion(const FilePath &clangToolPath) { + QTC_CHECK(!clangToolPath.isEmpty()); static QMap> cache; auto it = cache.find(clangToolPath); if (it == cache.end())