Fixed #6990 (false negative: Invalid abs() argument nr 1. A non-boolean value is required.)
This commit is contained in:
parent
64494ca226
commit
293bd2eead
|
@ -95,7 +95,11 @@ void CheckFunctions::invalidFunctionUsage()
|
|||
const Token *top = argtok;
|
||||
while (top->astParent() && top->astParent()->str() != "," && top->astParent() != tok->next())
|
||||
top = top->astParent();
|
||||
if (top->isComparisonOp() || Token::Match(top, "%oror%|&&")) {
|
||||
const Token *var = top;
|
||||
while (Token::Match(top, ".|::"))
|
||||
var = var->astOperand2();
|
||||
if (Token::Match(top, "%comp%|%oror%|&&|!|true|false") ||
|
||||
(var && var->variable() && Token::Match(var->variable()->typeStartToken(), "bool"))) {
|
||||
if (_settings->library.isboolargbad(functionToken, argnr))
|
||||
invalidFunctionArgBoolError(top, functionToken->str(), argnr);
|
||||
|
||||
|
|
|
@ -404,6 +404,15 @@ private:
|
|||
check("int f() { memset(a,b,sizeof(a)!=0); }");
|
||||
ASSERT_EQUALS("[test.cpp:1]: (error) Invalid memset() argument nr 3. A non-boolean value is required.\n", errout.str());
|
||||
|
||||
check("int f() { memset(a,b,!c); }");
|
||||
ASSERT_EQUALS("[test.cpp:1]: (error) Invalid memset() argument nr 3. A non-boolean value is required.\n", errout.str());
|
||||
|
||||
// Ticket #6990
|
||||
check("int f(bool c) { memset(a,b,c); }");
|
||||
ASSERT_EQUALS("[test.cpp:1]: (error) Invalid memset() argument nr 3. A non-boolean value is required.\n", errout.str());
|
||||
check("int f() { memset(a,b,true); }");
|
||||
ASSERT_EQUALS("[test.cpp:1]: (error) Invalid memset() argument nr 3. A non-boolean value is required.\n", errout.str());
|
||||
|
||||
// Ticket #6588 (c mode)
|
||||
check("void record(char* buf, int n) {\n"
|
||||
" memset(buf, 0, n < 255);\n" /* KO */
|
||||
|
|
Loading…
Reference in New Issue