Suppressions: Add special case for backwards compatibility. suppression comment after a {.
This commit is contained in:
parent
7ff6d691e2
commit
ea3a9d658a
|
@ -166,10 +166,20 @@ static void inlineSuppressions(const simplecpp::TokenList &tokens, Settings &mSe
|
|||
}
|
||||
relativeFilename = Path::simplifyPath(relativeFilename);
|
||||
|
||||
// special handling when suppressing { warnings for backwards compatibility
|
||||
const bool thisAndNextLine = tok->previous &&
|
||||
tok->previous->previous &&
|
||||
tok->next &&
|
||||
!sameline(tok->previous->previous, tok->previous) &&
|
||||
tok->location.line + 1 == tok->next->location.line &&
|
||||
tok->location.fileIndex == tok->next->location.fileIndex &&
|
||||
tok->previous->str() == "{";
|
||||
|
||||
// Add the suppressions.
|
||||
for (Suppressions::Suppression &suppr : inlineSuppressions) {
|
||||
suppr.fileName = relativeFilename;
|
||||
suppr.lineNumber = tok->location.line;
|
||||
suppr.thisAndNextLine = thisAndNextLine;
|
||||
mSettings.nomsg.addSuppression(suppr);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -291,8 +291,10 @@ bool Suppressions::Suppression::isSuppressed(const Suppressions::ErrorMessage &e
|
|||
return false;
|
||||
if (!fileName.empty() && !matchglob(fileName, errmsg.getFileName()))
|
||||
return false;
|
||||
if (lineNumber != NO_LINE && lineNumber != errmsg.lineNumber)
|
||||
return false;
|
||||
if (lineNumber != NO_LINE && lineNumber != errmsg.lineNumber) {
|
||||
if (!thisAndNextLine || lineNumber + 1 != errmsg.lineNumber)
|
||||
return false;
|
||||
}
|
||||
if (!symbolName.empty()) {
|
||||
for (std::string::size_type pos = 0; pos < errmsg.symbolNames.size();) {
|
||||
const std::string::size_type pos2 = errmsg.symbolNames.find('\n',pos);
|
||||
|
|
|
@ -53,7 +53,7 @@ public:
|
|||
Suppression(const Suppression &other) {
|
||||
*this = other;
|
||||
}
|
||||
Suppression(const std::string &id, const std::string &file, int line=NO_LINE) : errorId(id), fileName(file), lineNumber(line), hash(0), matched(false) {}
|
||||
Suppression(const std::string &id, const std::string &file, int line=NO_LINE) : errorId(id), fileName(file), lineNumber(line), hash(0), thisAndNextLine(false), matched(false) {}
|
||||
|
||||
Suppression & operator=(const Suppression &other) {
|
||||
errorId = other.errorId;
|
||||
|
@ -61,6 +61,7 @@ public:
|
|||
lineNumber = other.lineNumber;
|
||||
symbolName = other.symbolName;
|
||||
hash = other.hash;
|
||||
thisAndNextLine = other.thisAndNextLine;
|
||||
matched = other.matched;
|
||||
return *this;
|
||||
}
|
||||
|
@ -76,6 +77,8 @@ public:
|
|||
return symbolName < other.symbolName;
|
||||
if (hash != other.hash)
|
||||
return hash < other.hash;
|
||||
if (thisAndNextLine != other.thisAndNextLine)
|
||||
return thisAndNextLine;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -101,6 +104,7 @@ public:
|
|||
int lineNumber;
|
||||
std::string symbolName;
|
||||
std::size_t hash;
|
||||
bool thisAndNextLine; // Special case for backwards compatibility: { // cppcheck-suppress something
|
||||
bool matched;
|
||||
|
||||
enum { NO_LINE = -1 };
|
||||
|
|
|
@ -24,3 +24,11 @@ def test_unmatched_suppression_path_with_extra_stuf():
|
|||
ret, stdout, stderr = cppcheck(['--inline-suppr', '--enable=information', '--error-exitcode=1', './proj-inline-suppress/2.c'])
|
||||
assert ret == 1
|
||||
assert 'Unmatched suppression: some_warning_id' in stderr
|
||||
|
||||
def test_backwards_compatibility():
|
||||
ret, stdout, stderr = cppcheck(['--enable=unusedFunction', 'proj-inline-suppress/3.cpp'])
|
||||
assert len(stderr) > 0
|
||||
|
||||
ret, stdout, stderr = cppcheck(['--inline-suppr', '--enable=unusedFunction', 'proj-inline-suppress/3.cpp'])
|
||||
assert ret == 0
|
||||
assert stderr == ''
|
||||
|
|
Loading…
Reference in New Issue