TestCondition: Don't warn when sizeof is involved (#2896)
This commit is contained in:
parent
8d600fde12
commit
829c543331
|
@ -1472,7 +1472,6 @@ void CheckCondition::alwaysTrueFalse()
|
||||||
|
|
||||||
// don't warn when condition checks sizeof result
|
// don't warn when condition checks sizeof result
|
||||||
bool hasSizeof = false;
|
bool hasSizeof = false;
|
||||||
bool hasNonNumber = false;
|
|
||||||
visitAstNodes(tok, [&](const Token * tok2) {
|
visitAstNodes(tok, [&](const Token * tok2) {
|
||||||
if (!tok2)
|
if (!tok2)
|
||||||
return ChildrenToVisit::none;
|
return ChildrenToVisit::none;
|
||||||
|
@ -1484,11 +1483,10 @@ void CheckCondition::alwaysTrueFalse()
|
||||||
}
|
}
|
||||||
if (tok2->isComparisonOp() || tok2->isArithmeticalOp()) {
|
if (tok2->isComparisonOp() || tok2->isArithmeticalOp()) {
|
||||||
return ChildrenToVisit::op1_and_op2;
|
return ChildrenToVisit::op1_and_op2;
|
||||||
} else
|
}
|
||||||
hasNonNumber = true;
|
|
||||||
return ChildrenToVisit::none;
|
return ChildrenToVisit::none;
|
||||||
});
|
});
|
||||||
if (!hasNonNumber && hasSizeof)
|
if (hasSizeof)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
alwaysTrueFalseError(tok, &tok->values().front());
|
alwaysTrueFalseError(tok, &tok->values().front());
|
||||||
|
|
|
@ -700,6 +700,18 @@ private:
|
||||||
" else if ( value & (int)Value2 ) {}\n"
|
" else if ( value & (int)Value2 ) {}\n"
|
||||||
"}\n");
|
"}\n");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
|
check("void f(size_t x) {\n"
|
||||||
|
" if (x == sizeof(int)) {}\n"
|
||||||
|
" else { if (x == sizeof(long))} {}\n"
|
||||||
|
"}\n");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
|
check("void f(size_t x) {\n"
|
||||||
|
" if (x == sizeof(long)) {}\n"
|
||||||
|
" else { if (x == sizeof(long long))} {}\n"
|
||||||
|
"}\n");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void oppositeElseIfCondition() {
|
void oppositeElseIfCondition() {
|
||||||
|
@ -3002,8 +3014,8 @@ private:
|
||||||
" if (sizeof(char) != x) {}\n"
|
" if (sizeof(char) != x) {}\n"
|
||||||
" if (x != sizeof(char)) {}\n"
|
" if (x != sizeof(char)) {}\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("[test.cpp:3]: (style) Condition 'sizeof(char)!=x' is always true\n"
|
TODO_ASSERT_EQUALS("[test.cpp:3]: (style) Condition 'sizeof(char)!=x' is always true\n"
|
||||||
"[test.cpp:4]: (style) Condition 'x!=sizeof(char)' is always true\n", errout.str());
|
"[test.cpp:4]: (style) Condition 'x!=sizeof(char)' is always true\n", "", errout.str());
|
||||||
|
|
||||||
// Don't warn in assertions. Condition is often 'always true' by intention.
|
// Don't warn in assertions. Condition is often 'always true' by intention.
|
||||||
// If platform,defines,etc cause an 'always false' assertion then that is not very dangerous neither
|
// If platform,defines,etc cause an 'always false' assertion then that is not very dangerous neither
|
||||||
|
|
Loading…
Reference in New Issue