Fixed #7756 (ValueFlow: fix bug in valueAfterAssign, same variable in lhs and rhs)

This commit is contained in:
Daniel Marjamäki 2016-10-15 19:09:50 +02:00
parent d09a8dde57
commit ad74421526
2 changed files with 19 additions and 1 deletions

View File

@ -1674,7 +1674,18 @@ static void valueFlowAfterAssign(TokenList *tokenlist, SymbolDatabase* symboldat
} }
} }
valueFlowForward(tok, endOfVarScope, var, varid, values, constValue, tokenlist, errorLogger, settings); // Skip RHS
const Token *nextExpression = tok->astOperand2();
for (;;) {
if (nextExpression->astOperand2())
nextExpression = nextExpression->astOperand2();
else if (nextExpression->isUnaryPreOp())
nextExpression = nextExpression->astOperand1();
else break;
}
nextExpression = nextExpression->next();
valueFlowForward(const_cast<Token *>(nextExpression), endOfVarScope, var, varid, values, constValue, tokenlist, errorLogger, settings);
} }
} }
} }

View File

@ -772,6 +772,13 @@ private:
ASSERT_EQUALS(false, testValueOfX(code, 4U, 9)); ASSERT_EQUALS(false, testValueOfX(code, 4U, 9));
ASSERT_EQUALS(true, testValueOfX(code, 4U, 8)); ASSERT_EQUALS(true, testValueOfX(code, 4U, 8));
code = "void x() {\n"
" int x = value ? 6 : 0;\n"
" x =\n"
" 1 + x;\n"
"}";
ASSERT_EQUALS(false, testValueOfX(code, 4U, 7));
code = "void f() {\n" code = "void f() {\n"
" int x = 0;\n" " int x = 0;\n"
" y = x += z;\n" " y = x += z;\n"