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 <hjk@qt.io>
This commit is contained in:
Christian Kandeler
2023-03-13 15:02:03 +01:00
parent 287783a776
commit d612581667
2 changed files with 7 additions and 7 deletions

View File

@@ -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<TaskItem> tasks{ParallelLimit(qMax(1, m_runSettings.parallelJobs()))};
for (const AnalyzeUnit &unit : std::as_const(unitsToProcess)) {

View File

@@ -225,6 +225,7 @@ static QPair<FilePath, QString> clangIncludeDirAndVersion(const FilePath &clangT
QPair<FilePath, QString> getClangIncludeDirAndVersion(const FilePath &clangToolPath)
{
QTC_CHECK(!clangToolPath.isEmpty());
static QMap<FilePath, QPair<FilePath, QString>> cache;
auto it = cache.find(clangToolPath);
if (it == cache.end())