2022-07-08 16:42:57 +02:00
|
|
|
/*
|
|
|
|
* Cppcheck - A tool for static C/C++ code analysis
|
2023-06-21 16:41:22 +02:00
|
|
|
* Copyright (C) 2007-2023 Cppcheck team.
|
2022-07-08 16:42:57 +02:00
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "executor.h"
|
|
|
|
|
2023-04-08 18:06:38 +02:00
|
|
|
#include "color.h"
|
2023-03-04 12:05:17 +01:00
|
|
|
#include "errorlogger.h"
|
|
|
|
#include "settings.h"
|
2023-04-08 16:08:47 +02:00
|
|
|
#include "suppressions.h"
|
2023-03-04 12:05:17 +01:00
|
|
|
|
|
|
|
#include <algorithm>
|
2023-11-06 19:06:22 +01:00
|
|
|
#include <cassert>
|
2023-04-08 18:06:38 +02:00
|
|
|
#include <sstream> // IWYU pragma: keep
|
2023-04-08 16:08:47 +02:00
|
|
|
#include <utility>
|
2023-03-04 12:05:17 +01:00
|
|
|
|
2023-11-03 23:24:04 +01:00
|
|
|
struct FileSettings;
|
|
|
|
|
2023-11-07 21:21:24 +01:00
|
|
|
Executor::Executor(const std::list<std::pair<std::string, std::size_t>> &files, const std::list<FileSettings>& fileSettings, const Settings &settings, Suppressions &suppressions, ErrorLogger &errorLogger)
|
2023-11-03 23:24:04 +01:00
|
|
|
: mFiles(files), mFileSettings(fileSettings), mSettings(settings), mSuppressions(suppressions), mErrorLogger(errorLogger)
|
2023-11-06 19:06:22 +01:00
|
|
|
{
|
|
|
|
// the two inputs may only be used exclusively
|
|
|
|
assert(!(!files.empty() && !fileSettings.empty()));
|
|
|
|
}
|
2022-07-08 16:42:57 +02:00
|
|
|
|
aligned and optimized unique error handling (#5280)
The handling in `CppCheck::reportErr()` and `Executor::hasToLog()` was
slightly different. I hope this can somehow be shared after the executor
reworking.
We were also using a very inappropriate container for the error list
which caused a lot of overhead.
`-D__GNUC__ --debug-warnings --template=daca2 --check-library -j2
../test/testsymboldatabase.cpp`
Clang 15
main process `284,218,587` -> `175,691,241`
worker process `9,123,697,183` -> `8,951,903,360`
2023-12-17 21:59:06 +01:00
|
|
|
// TODO: this logic is duplicated in CppCheck::reportErr()
|
2023-03-04 12:05:17 +01:00
|
|
|
bool Executor::hasToLog(const ErrorMessage &msg)
|
|
|
|
{
|
aligned and optimized unique error handling (#5280)
The handling in `CppCheck::reportErr()` and `Executor::hasToLog()` was
slightly different. I hope this can somehow be shared after the executor
reworking.
We were also using a very inappropriate container for the error list
which caused a lot of overhead.
`-D__GNUC__ --debug-warnings --template=daca2 --check-library -j2
../test/testsymboldatabase.cpp`
Clang 15
main process `284,218,587` -> `175,691,241`
worker process `9,123,697,183` -> `8,951,903,360`
2023-12-17 21:59:06 +01:00
|
|
|
if (!mSettings.library.reportErrors(msg.file0))
|
|
|
|
return false;
|
|
|
|
|
2023-10-16 19:43:15 +02:00
|
|
|
if (!mSuppressions.isSuppressed(msg, {}))
|
2023-03-04 12:05:17 +01:00
|
|
|
{
|
aligned and optimized unique error handling (#5280)
The handling in `CppCheck::reportErr()` and `Executor::hasToLog()` was
slightly different. I hope this can somehow be shared after the executor
reworking.
We were also using a very inappropriate container for the error list
which caused a lot of overhead.
`-D__GNUC__ --debug-warnings --template=daca2 --check-library -j2
../test/testsymboldatabase.cpp`
Clang 15
main process `284,218,587` -> `175,691,241`
worker process `9,123,697,183` -> `8,951,903,360`
2023-12-17 21:59:06 +01:00
|
|
|
// TODO: there should be no need for verbose and default messages here
|
2023-03-04 12:05:17 +01:00
|
|
|
std::string errmsg = msg.toString(mSettings.verbose);
|
aligned and optimized unique error handling (#5280)
The handling in `CppCheck::reportErr()` and `Executor::hasToLog()` was
slightly different. I hope this can somehow be shared after the executor
reworking.
We were also using a very inappropriate container for the error list
which caused a lot of overhead.
`-D__GNUC__ --debug-warnings --template=daca2 --check-library -j2
../test/testsymboldatabase.cpp`
Clang 15
main process `284,218,587` -> `175,691,241`
worker process `9,123,697,183` -> `8,951,903,360`
2023-12-17 21:59:06 +01:00
|
|
|
if (errmsg.empty())
|
|
|
|
return false;
|
2023-03-04 12:05:17 +01:00
|
|
|
|
|
|
|
std::lock_guard<std::mutex> lg(mErrorListSync);
|
aligned and optimized unique error handling (#5280)
The handling in `CppCheck::reportErr()` and `Executor::hasToLog()` was
slightly different. I hope this can somehow be shared after the executor
reworking.
We were also using a very inappropriate container for the error list
which caused a lot of overhead.
`-D__GNUC__ --debug-warnings --template=daca2 --check-library -j2
../test/testsymboldatabase.cpp`
Clang 15
main process `284,218,587` -> `175,691,241`
worker process `9,123,697,183` -> `8,951,903,360`
2023-12-17 21:59:06 +01:00
|
|
|
if (mErrorList.emplace(std::move(errmsg)).second) {
|
2023-03-04 12:05:17 +01:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2023-04-08 18:06:38 +02:00
|
|
|
void Executor::reportStatus(std::size_t fileindex, std::size_t filecount, std::size_t sizedone, std::size_t sizetotal)
|
|
|
|
{
|
|
|
|
if (filecount > 1) {
|
|
|
|
std::ostringstream oss;
|
|
|
|
const unsigned long percentDone = (sizetotal > 0) ? (100 * sizedone) / sizetotal : 0;
|
|
|
|
oss << fileindex << '/' << filecount
|
|
|
|
<< " files checked " << percentDone
|
|
|
|
<< "% done";
|
|
|
|
mErrorLogger.reportOut(oss.str(), Color::FgBlue);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|