value flow: fixed todo assertion for handling of conditions
This commit is contained in:
parent
cdaa7abf7e
commit
ccda78f347
|
@ -95,8 +95,12 @@ static bool bailoutFunctionPar(const Token *tok, const ValueFlow::Value &value,
|
||||||
static const Token * skipValueInConditionalExpression(const Token * const valuetok)
|
static const Token * skipValueInConditionalExpression(const Token * const valuetok)
|
||||||
{
|
{
|
||||||
// Walk up the ast
|
// Walk up the ast
|
||||||
|
const Token *prev = valuetok;
|
||||||
for (const Token *tok = valuetok->astParent(); tok; tok = tok->astParent()) {
|
for (const Token *tok = valuetok->astParent(); tok; tok = tok->astParent()) {
|
||||||
if (!Token::Match(tok, "%oror%|&&|?|:"))
|
const bool prevIsLhs = (prev == tok->astOperand1());
|
||||||
|
prev = tok;
|
||||||
|
|
||||||
|
if (prevIsLhs || !Token::Match(tok, "%oror%|&&|?|:"))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Is variable protected in LHS..
|
// Is variable protected in LHS..
|
||||||
|
|
|
@ -350,9 +350,9 @@ private:
|
||||||
" if (x != NULL) { }\n"
|
" if (x != NULL) { }\n"
|
||||||
"}";
|
"}";
|
||||||
ASSERT_EQUALS(true, testValueOfX(code, 2U, 0));
|
ASSERT_EQUALS(true, testValueOfX(code, 2U, 0));
|
||||||
TODO_ASSERT_EQUALS(true, false, testValueOfX(code, 3U, 0));
|
ASSERT_EQUALS(true, testValueOfX(code, 3U, 0));
|
||||||
ASSERT_EQUALS(false, testValueOfX(code, 3U, 0));
|
ASSERT_EQUALS(false, testValueOfX(code, 4U, 0));
|
||||||
ASSERT_EQUALS(false, testValueOfX(code, 3U, 0));
|
ASSERT_EQUALS(false, testValueOfX(code, 5U, 0));
|
||||||
|
|
||||||
bailout("void f(int x) {\n"
|
bailout("void f(int x) {\n"
|
||||||
" if (x != 123) { b = x; }\n"
|
" if (x != 123) { b = x; }\n"
|
||||||
|
|
Loading…
Reference in New Issue