Fixed #8926 (false positive: (style) Condition 's.x<=y' is always true)
This commit is contained in:
parent
bc234e2712
commit
236c88151f
|
@ -1160,6 +1160,11 @@ struct FwdAnalysis::Result FwdAnalysis::checkRecursive(const Token *expr, const
|
||||||
if (Token::simpleMatch(tok, "asm ("))
|
if (Token::simpleMatch(tok, "asm ("))
|
||||||
return Result(Result::Type::BAILOUT);
|
return Result(Result::Type::BAILOUT);
|
||||||
|
|
||||||
|
if (mWhat == What::ValueFlow && Token::Match(tok, "while|for (")) {
|
||||||
|
// TODO: only bailout if expr is reassigned in loop
|
||||||
|
return Result(Result::Type::BAILOUT);
|
||||||
|
}
|
||||||
|
|
||||||
if (!local && Token::Match(tok, "%name% (") && !Token::simpleMatch(tok->linkAt(1), ") {")) {
|
if (!local && Token::Match(tok, "%name% (") && !Token::simpleMatch(tok->linkAt(1), ") {")) {
|
||||||
// TODO: this is a quick bailout
|
// TODO: this is a quick bailout
|
||||||
return Result(Result::Type::BAILOUT);
|
return Result(Result::Type::BAILOUT);
|
||||||
|
|
|
@ -2437,6 +2437,16 @@ private:
|
||||||
ASSERT_EQUALS(true, values.front().isIntValue());
|
ASSERT_EQUALS(true, values.front().isIntValue());
|
||||||
ASSERT_EQUALS(1, values.front().intvalue);
|
ASSERT_EQUALS(1, values.front().intvalue);
|
||||||
|
|
||||||
|
code = "void f() {\n"
|
||||||
|
" S s;\n"
|
||||||
|
" s.x = 1;\n"
|
||||||
|
" int y = 10;\n"
|
||||||
|
" while (s.x < y)\n" // s.x does not have known value
|
||||||
|
" s.x++;\n"
|
||||||
|
"}";
|
||||||
|
values = tokenValues(code, "<");
|
||||||
|
ASSERT_EQUALS(true, values.empty());
|
||||||
|
|
||||||
code = "void f() {\n"
|
code = "void f() {\n"
|
||||||
" Hints hints;\n"
|
" Hints hints;\n"
|
||||||
" hints.x = 1;\n"
|
" hints.x = 1;\n"
|
||||||
|
|
Loading…
Reference in New Issue