CLI: Added --max-ctu-depth
This commit is contained in:
parent
7f506517ee
commit
437800f46d
|
@ -155,6 +155,10 @@ bool CmdLineParser::parseFromArgs(int argc, const char* const argv[])
|
||||||
else if (std::strcmp(argv[i], "--dump") == 0)
|
else if (std::strcmp(argv[i], "--dump") == 0)
|
||||||
mSettings->dump = true;
|
mSettings->dump = true;
|
||||||
|
|
||||||
|
// max ctu depth
|
||||||
|
else if (std::strncmp(argv[i], "--max-ctu-depth=", 16) == 0)
|
||||||
|
mSettings->maxCtuDepth = std::atoi(argv[i] + 16);
|
||||||
|
|
||||||
// (Experimental) exception handling inside cppcheck client
|
// (Experimental) exception handling inside cppcheck client
|
||||||
else if (std::strcmp(argv[i], "--exception-handling") == 0)
|
else if (std::strcmp(argv[i], "--exception-handling") == 0)
|
||||||
mSettings->exceptionHandling = true;
|
mSettings->exceptionHandling = true;
|
||||||
|
@ -1013,6 +1017,9 @@ void CmdLineParser::printHelp()
|
||||||
" distributed with Cppcheck is loaded automatically.\n"
|
" distributed with Cppcheck is loaded automatically.\n"
|
||||||
" For more information about library files, read the\n"
|
" For more information about library files, read the\n"
|
||||||
" manual.\n"
|
" manual.\n"
|
||||||
|
" --max-ctu-depth=N Max depth in whole program analysis. The default value\n"
|
||||||
|
" is 2. A larger value will mean more errors can be found\n"
|
||||||
|
" but also means the analysis will be slower.\n"
|
||||||
" --output-file=<file> Write results to file, rather than standard error.\n"
|
" --output-file=<file> Write results to file, rather than standard error.\n"
|
||||||
" --project=<file> Run Cppcheck on project. The <file> can be a Visual\n"
|
" --project=<file> Run Cppcheck on project. The <file> can be a Visual\n"
|
||||||
" Studio Solution (*.sln), Visual Studio Project\n"
|
" Studio Solution (*.sln), Visual Studio Project\n"
|
||||||
|
|
|
@ -1036,6 +1036,8 @@ void CppCheck::getErrorMessages()
|
||||||
bool CppCheck::analyseWholeProgram()
|
bool CppCheck::analyseWholeProgram()
|
||||||
{
|
{
|
||||||
bool errors = false;
|
bool errors = false;
|
||||||
|
// Init CTU
|
||||||
|
CTU::maxCtuDepth = mSettings.maxCtuDepth;
|
||||||
// Analyse the tokens
|
// Analyse the tokens
|
||||||
CTU::FileInfo ctu;
|
CTU::FileInfo ctu;
|
||||||
for (const Check::FileInfo *fi : mFileInfo) {
|
for (const Check::FileInfo *fi : mFileInfo) {
|
||||||
|
@ -1100,6 +1102,9 @@ void CppCheck::analyseWholeProgram(const std::string &buildDir, const std::map<s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set CTU max depth
|
||||||
|
CTU::maxCtuDepth = mSettings.maxCtuDepth;
|
||||||
|
|
||||||
// Analyse the tokens
|
// Analyse the tokens
|
||||||
for (Check *check : Check::instances())
|
for (Check *check : Check::instances())
|
||||||
check->analyseWholeProgram(&ctuFileInfo, fileInfoList, mSettings, *this);
|
check->analyseWholeProgram(&ctuFileInfo, fileInfoList, mSettings, *this);
|
||||||
|
|
|
@ -38,6 +38,7 @@ static const char ATTR_MY_ID[] = "my-id";
|
||||||
static const char ATTR_MY_ARGNR[] = "my-argnr";
|
static const char ATTR_MY_ARGNR[] = "my-argnr";
|
||||||
static const char ATTR_MY_ARGNAME[] = "my-argname";
|
static const char ATTR_MY_ARGNAME[] = "my-argname";
|
||||||
|
|
||||||
|
int CTU::maxCtuDepth = 2;
|
||||||
|
|
||||||
std::string CTU::getFunctionId(const Tokenizer *tokenizer, const Function *function)
|
std::string CTU::getFunctionId(const Tokenizer *tokenizer, const Function *function)
|
||||||
{
|
{
|
||||||
|
@ -426,7 +427,7 @@ static bool findPath(const std::string &callId,
|
||||||
int index,
|
int index,
|
||||||
bool warning)
|
bool warning)
|
||||||
{
|
{
|
||||||
if (index >= 10)
|
if (index >= CTU::maxCtuDepth || index >= 10)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
const std::map<std::string, std::list<const CTU::FileInfo::CallBase *>>::const_iterator it = callsMap.find(callId);
|
const std::map<std::string, std::list<const CTU::FileInfo::CallBase *>>::const_iterator it = callsMap.find(callId);
|
||||||
|
|
|
@ -117,6 +117,8 @@ namespace CTU {
|
||||||
bool warning) const;
|
bool warning) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern int maxCtuDepth;
|
||||||
|
|
||||||
CPPCHECKLIB std::string toString(const std::list<FileInfo::UnsafeUsage> &unsafeUsage);
|
CPPCHECKLIB std::string toString(const std::list<FileInfo::UnsafeUsage> &unsafeUsage);
|
||||||
|
|
||||||
CPPCHECKLIB std::string getFunctionId(const Tokenizer *tokenizer, const Function *function);
|
CPPCHECKLIB std::string getFunctionId(const Tokenizer *tokenizer, const Function *function);
|
||||||
|
|
|
@ -32,6 +32,7 @@ Settings::Settings()
|
||||||
exceptionHandling(false),
|
exceptionHandling(false),
|
||||||
inconclusive(false),
|
inconclusive(false),
|
||||||
jointSuppressionReport(false),
|
jointSuppressionReport(false),
|
||||||
|
maxCtuDepth(2),
|
||||||
experimental(false),
|
experimental(false),
|
||||||
quiet(false),
|
quiet(false),
|
||||||
inlineSuppressions(false),
|
inlineSuppressions(false),
|
||||||
|
|
|
@ -85,6 +85,9 @@ public:
|
||||||
/** @brief Is --debug-template given? */
|
/** @brief Is --debug-template given? */
|
||||||
bool debugtemplate;
|
bool debugtemplate;
|
||||||
|
|
||||||
|
/** @brief --max-ctu-depth */
|
||||||
|
int maxCtuDepth;
|
||||||
|
|
||||||
/** @brief Is --dump given? */
|
/** @brief Is --dump given? */
|
||||||
bool dump;
|
bool dump;
|
||||||
std::string dumpFile;
|
std::string dumpFile;
|
||||||
|
|
|
@ -165,6 +165,9 @@ man(1), man(7), http://www.tldp.org/HOWTO/Man-Page/
|
||||||
<arg choice="opt">
|
<arg choice="opt">
|
||||||
<option>--max-configs=<limit></option>
|
<option>--max-configs=<limit></option>
|
||||||
</arg>
|
</arg>
|
||||||
|
<arg choice="opt">
|
||||||
|
<option>--max-ctu-depth=<limit></option>
|
||||||
|
</arg>
|
||||||
<arg choice="opt">
|
<arg choice="opt">
|
||||||
<option>--platform=<type></option>
|
<option>--platform=<type></option>
|
||||||
</arg>
|
</arg>
|
||||||
|
@ -457,6 +460,14 @@ There are false positives with this option. Each result must be carefully invest
|
||||||
the one that is effective.</para>
|
the one that is effective.</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>
|
||||||
|
<option>--max-ctu-depths=<limit></option>
|
||||||
|
</term>
|
||||||
|
<listitem>
|
||||||
|
<para>Maximum depth in whole program analysis. Default is 2.</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>
|
<term>
|
||||||
<option>--platform=<type></option>
|
<option>--platform=<type></option>
|
||||||
|
|
Loading…
Reference in New Issue