Fixed reporting of unmatched suppressions for unusedFunction (#4946)
This commit is contained in:
parent
47764321f2
commit
e35329aba3
|
@ -770,7 +770,7 @@ int CppCheckExecutor::check_internal(CppCheck& cppcheck, int /*argc*/, const cha
|
|||
}
|
||||
|
||||
if (settings.isEnabled("information") || settings.checkConfiguration)
|
||||
reportUnmatchedSuppressions(settings.nomsg.getUnmatchedGlobalSuppressions());
|
||||
reportUnmatchedSuppressions(settings.nomsg.getUnmatchedGlobalSuppressions(settings._jobs == 1 && settings.isEnabled("unusedFunction")));
|
||||
|
||||
if (!settings.checkConfiguration) {
|
||||
cppcheck.tooManyConfigsError("",0U);
|
||||
|
|
|
@ -242,7 +242,7 @@ unsigned int CppCheck::processFile(const std::string& filename, const std::strin
|
|||
}
|
||||
|
||||
if (_settings.isEnabled("information") || _settings.checkConfiguration)
|
||||
reportUnmatchedSuppressions(_settings.nomsg.getUnmatchedLocalSuppressions(filename));
|
||||
reportUnmatchedSuppressions(_settings.nomsg.getUnmatchedLocalSuppressions(filename, _settings._jobs == 1 && _settings.isEnabled("unusedFunction")));
|
||||
|
||||
_errorList.clear();
|
||||
return exitcode;
|
||||
|
|
|
@ -265,11 +265,11 @@ bool Suppressions::isSuppressedLocal(const std::string &errorId, const std::stri
|
|||
return _suppressions[errorId].isSuppressedLocal(file, line);
|
||||
}
|
||||
|
||||
std::list<Suppressions::SuppressionEntry> Suppressions::getUnmatchedLocalSuppressions(const std::string &file) const
|
||||
std::list<Suppressions::SuppressionEntry> Suppressions::getUnmatchedLocalSuppressions(const std::string &file, bool unusedFunctionChecking) const
|
||||
{
|
||||
std::list<SuppressionEntry> r;
|
||||
for (std::map<std::string, FileMatcher>::const_iterator i = _suppressions.begin(); i != _suppressions.end(); ++i) {
|
||||
if (i->first == "unusedFunction")
|
||||
if (!unusedFunctionChecking && i->first == "unusedFunction")
|
||||
continue; // unusedFunction is not a "local" suppression
|
||||
|
||||
std::map<std::string, std::map<unsigned int, bool> >::const_iterator f = i->second._files.find(file);
|
||||
|
@ -284,10 +284,13 @@ std::list<Suppressions::SuppressionEntry> Suppressions::getUnmatchedLocalSuppres
|
|||
return r;
|
||||
}
|
||||
|
||||
std::list<Suppressions::SuppressionEntry> Suppressions::getUnmatchedGlobalSuppressions() const
|
||||
std::list<Suppressions::SuppressionEntry> Suppressions::getUnmatchedGlobalSuppressions(bool unusedFunctionChecking) const
|
||||
{
|
||||
std::list<SuppressionEntry> r;
|
||||
for (std::map<std::string, FileMatcher>::const_iterator i = _suppressions.begin(); i != _suppressions.end(); ++i) {
|
||||
if (!unusedFunctionChecking && i->first == "unusedFunction")
|
||||
continue;
|
||||
|
||||
// global suppressions..
|
||||
for (std::map<std::string, std::map<unsigned int, bool> >::const_iterator g = i->second._globs.begin(); g != i->second._globs.end(); ++g) {
|
||||
for (std::map<unsigned int, bool>::const_iterator l = g->second.begin(); l != g->second.end(); ++l) {
|
||||
|
@ -296,17 +299,6 @@ std::list<Suppressions::SuppressionEntry> Suppressions::getUnmatchedGlobalSuppre
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// unusedFunction..
|
||||
if (i->first == "unusedFunction") {
|
||||
for (std::map<std::string, std::map<unsigned int, bool> >::const_iterator f = i->second._files.begin(); f != i->second._files.end(); ++f) {
|
||||
for (std::map<unsigned int, bool>::const_iterator l = f->second.begin(); l != f->second.end(); ++l) {
|
||||
if (!l->second) {
|
||||
r.push_back(SuppressionEntry(i->first, f->first, l->first));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
|
|
@ -133,13 +133,13 @@ public:
|
|||
* @brief Returns list of unmatched local (per-file) suppressions.
|
||||
* @return list of unmatched suppressions
|
||||
*/
|
||||
std::list<SuppressionEntry> getUnmatchedLocalSuppressions(const std::string &file) const;
|
||||
std::list<SuppressionEntry> getUnmatchedLocalSuppressions(const std::string &file, bool unusedFunctionChecking) const;
|
||||
|
||||
/**
|
||||
* @brief Returns list of unmatched global (glob pattern) suppressions.
|
||||
* @return list of unmatched suppressions
|
||||
*/
|
||||
std::list<SuppressionEntry> getUnmatchedGlobalSuppressions() const;
|
||||
std::list<SuppressionEntry> getUnmatchedGlobalSuppressions(bool unusedFunctionChecking) const;
|
||||
};
|
||||
|
||||
/// @}
|
||||
|
|
|
@ -244,7 +244,7 @@ private:
|
|||
CheckOther checkOther(&tokenizer, &settings, &logger);
|
||||
checkOther.checkSwitchCaseFallThrough();
|
||||
|
||||
logger.reportUnmatchedSuppressions(settings.nomsg.getUnmatchedLocalSuppressions(filename));
|
||||
logger.reportUnmatchedSuppressions(settings.nomsg.getUnmatchedLocalSuppressions(filename, false));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -44,6 +44,7 @@ private:
|
|||
TEST_CASE(suppressionsPathSeparator);
|
||||
|
||||
TEST_CASE(inlinesuppress_unusedFunction); // #4210 - unusedFunction
|
||||
TEST_CASE(globalsuppress_unusedFunction); // #4946
|
||||
TEST_CASE(suppressionWithRelativePaths); // #4733
|
||||
}
|
||||
|
||||
|
@ -130,7 +131,7 @@ private:
|
|||
|
||||
cppCheck.check("test.cpp", code);
|
||||
|
||||
reportUnmatchedSuppressions(settings.nomsg.getUnmatchedGlobalSuppressions());
|
||||
reportUnmatchedSuppressions(settings.nomsg.getUnmatchedGlobalSuppressions(true));
|
||||
}
|
||||
|
||||
void checkSuppressionThreads(const char code[], const std::string &suppression = emptyString) {
|
||||
|
@ -153,7 +154,7 @@ private:
|
|||
|
||||
executor.check();
|
||||
|
||||
reportUnmatchedSuppressions(settings.nomsg.getUnmatchedGlobalSuppressions());
|
||||
reportUnmatchedSuppressions(settings.nomsg.getUnmatchedGlobalSuppressions(false));
|
||||
}
|
||||
|
||||
// Check the suppression for multiple files
|
||||
|
@ -171,7 +172,7 @@ private:
|
|||
for (int i = 0; names[i] != NULL; ++i)
|
||||
cppCheck.check(names[i], codes[i]);
|
||||
|
||||
reportUnmatchedSuppressions(settings.nomsg.getUnmatchedGlobalSuppressions());
|
||||
reportUnmatchedSuppressions(settings.nomsg.getUnmatchedGlobalSuppressions(true));
|
||||
}
|
||||
|
||||
void runChecks(void (TestSuppressions::*check)(const char[], const std::string &)) {
|
||||
|
@ -323,11 +324,22 @@ private:
|
|||
ASSERT_EQUALS(true, suppressions.isSuppressed("someid", "test/foo/bar.cpp", 142));
|
||||
}
|
||||
|
||||
void inlinesuppress_unusedFunction() const { // #4210 - wrong report of "unmatchedSuppression" for "unusedFunction"
|
||||
void inlinesuppress_unusedFunction() const { // #4210, #4946 - wrong report of "unmatchedSuppression" for "unusedFunction"
|
||||
Suppressions suppressions;
|
||||
suppressions.addSuppression("unusedFunction", "test.c", 3U);
|
||||
ASSERT_EQUALS(true, suppressions.getUnmatchedLocalSuppressions("test.c").empty());
|
||||
ASSERT_EQUALS(false, suppressions.getUnmatchedGlobalSuppressions().empty());
|
||||
ASSERT_EQUALS(true, !suppressions.getUnmatchedLocalSuppressions("test.c", true).empty());
|
||||
ASSERT_EQUALS(false, !suppressions.getUnmatchedGlobalSuppressions(true).empty());
|
||||
ASSERT_EQUALS(false, !suppressions.getUnmatchedLocalSuppressions("test.c", false).empty());
|
||||
ASSERT_EQUALS(false, !suppressions.getUnmatchedGlobalSuppressions(false).empty());
|
||||
}
|
||||
|
||||
void globalsuppress_unusedFunction() const { // #4946 - wrong report of "unmatchedSuppression" for "unusedFunction"
|
||||
Suppressions suppressions;
|
||||
suppressions.addSuppressionLine("unusedFunction:*");
|
||||
ASSERT_EQUALS(false, !suppressions.getUnmatchedLocalSuppressions("test.c", true).empty());
|
||||
ASSERT_EQUALS(true, !suppressions.getUnmatchedGlobalSuppressions(true).empty());
|
||||
ASSERT_EQUALS(false, !suppressions.getUnmatchedLocalSuppressions("test.c", false).empty());
|
||||
ASSERT_EQUALS(false, !suppressions.getUnmatchedGlobalSuppressions(false).empty());
|
||||
}
|
||||
|
||||
void suppressionWithRelativePaths() {
|
||||
|
|
Loading…
Reference in New Issue