Fixed false positive "multiplySizeof" in TortoiseSVN
This commit is contained in:
parent
8cb1f09fc2
commit
5c566e838c
|
@ -247,6 +247,7 @@ void CheckSizeof::suspiciousSizeofCalculation()
|
||||||
if (!_settings->isEnabled("warning") || !_settings->inconclusive)
|
if (!_settings->isEnabled("warning") || !_settings->inconclusive)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// TODO: Use AST here. This should be possible as soon as sizeof without brackets is correctly parsed
|
||||||
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next()) {
|
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next()) {
|
||||||
if (Token::simpleMatch(tok, "sizeof (")) {
|
if (Token::simpleMatch(tok, "sizeof (")) {
|
||||||
const Token* const end = tok->linkAt(1);
|
const Token* const end = tok->linkAt(1);
|
||||||
|
@ -254,7 +255,7 @@ void CheckSizeof::suspiciousSizeofCalculation()
|
||||||
if (end->strAt(-1) == "*" || (var && var->isPointer() && !var->isArray())) {
|
if (end->strAt(-1) == "*" || (var && var->isPointer() && !var->isArray())) {
|
||||||
if (end->strAt(1) == "/")
|
if (end->strAt(1) == "/")
|
||||||
divideSizeofError(tok);
|
divideSizeofError(tok);
|
||||||
} else if (Token::simpleMatch(end, ") * sizeof"))
|
} else if (Token::simpleMatch(end, ") * sizeof") && end->next()->astOperand1() == tok->next())
|
||||||
multiplySizeofError(tok);
|
multiplySizeofError(tok);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -293,6 +293,9 @@ private:
|
||||||
|
|
||||||
check("return sizeof(foo)*bar;");
|
check("return sizeof(foo)*bar;");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
|
check("return (end - source) / sizeof(encode_block_type) * sizeof(encode_block_type);");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void checkPointerSizeof() {
|
void checkPointerSizeof() {
|
||||||
|
|
Loading…
Reference in New Issue