Fixed #5937 (ValueFlow: wrong analysis of calculations with different variable operands)
This commit is contained in:
parent
1bcb22e4a4
commit
893996d182
|
@ -245,6 +245,8 @@ static void setTokenValue(Token* tok, const ValueFlow::Value &value)
|
||||||
tok->values.push_back(value);
|
tok->values.push_back(value);
|
||||||
it = tok->values.end();
|
it = tok->values.end();
|
||||||
--it;
|
--it;
|
||||||
|
if (it->varId == 0)
|
||||||
|
it->varId = tok->varId();
|
||||||
}
|
}
|
||||||
|
|
||||||
Token *parent = const_cast<Token*>(tok->astParent());
|
Token *parent = const_cast<Token*>(tok->astParent());
|
||||||
|
|
|
@ -169,6 +169,22 @@ private:
|
||||||
" f(7);\n"
|
" f(7);\n"
|
||||||
"}";
|
"}";
|
||||||
ASSERT_EQUALS(15, valueOfTok(code, "+").intvalue);
|
ASSERT_EQUALS(15, valueOfTok(code, "+").intvalue);
|
||||||
|
|
||||||
|
code = "void f(int x, int y) {\n"
|
||||||
|
" a = x + y;\n"
|
||||||
|
"}\n"
|
||||||
|
"void callf() {\n"
|
||||||
|
" f(1,1);\n"
|
||||||
|
" f(10,10);\n"
|
||||||
|
"}";
|
||||||
|
values = tokenValues(code, "+");
|
||||||
|
ASSERT_EQUALS(true, values.empty());
|
||||||
|
if (!values.empty()) {
|
||||||
|
/* todo.. */
|
||||||
|
ASSERT_EQUALS(2U, values.size());
|
||||||
|
ASSERT_EQUALS(2, values.front().intvalue);
|
||||||
|
ASSERT_EQUALS(22, values.back().intvalue);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void valueFlowBeforeCondition() {
|
void valueFlowBeforeCondition() {
|
||||||
|
|
Loading…
Reference in New Issue