FP on assignment through pointer (#1887)
* Fix FP when assigning through pointers * Add test case for false positive cppcheck would faulty warn: "Condition '*b>0' is always true"
This commit is contained in:
parent
246576fceb
commit
44d6066c6f
|
@ -1429,7 +1429,7 @@ FwdAnalysis::Result FwdAnalysis::check(const Token *expr, const Token *startToke
|
||||||
Result result = checkRecursive(expr, startToken, endToken, exprVarIds, local);
|
Result result = checkRecursive(expr, startToken, endToken, exprVarIds, local);
|
||||||
|
|
||||||
// Break => continue checking in outer scope
|
// Break => continue checking in outer scope
|
||||||
while (result.type == FwdAnalysis::Result::Type::BREAK) {
|
while (mWhat!=What::ValueFlow && result.type == FwdAnalysis::Result::Type::BREAK) {
|
||||||
const Scope *s = result.token->scope();
|
const Scope *s = result.token->scope();
|
||||||
while (s->type == Scope::eIf)
|
while (s->type == Scope::eIf)
|
||||||
s = s->nestedIn;
|
s = s->nestedIn;
|
||||||
|
|
|
@ -2566,6 +2566,22 @@ private:
|
||||||
"}";
|
"}";
|
||||||
values = tokenValues(code, "+");
|
values = tokenValues(code, "+");
|
||||||
TODO_ASSERT_EQUALS(2U, 0U, values.size()); // should be 2
|
TODO_ASSERT_EQUALS(2U, 0U, values.size()); // should be 2
|
||||||
|
|
||||||
|
// FP: Condition '*b>0' is always true
|
||||||
|
code = "bool dostuff(const char *x, const char *y);\n"
|
||||||
|
"void fun(char *s, int *b) {\n"
|
||||||
|
" for (int i = 0; i < 42; ++i) {\n"
|
||||||
|
" if (dostuff(s, \"1\")) {\n"
|
||||||
|
" *b = 1;\n"
|
||||||
|
" break;\n"
|
||||||
|
" }\n"
|
||||||
|
" }\n"
|
||||||
|
" if (*b > 0) {\n" // *b does not have known value
|
||||||
|
" }\n"
|
||||||
|
"}";
|
||||||
|
values = tokenValues(code, ">");
|
||||||
|
ASSERT_EQUALS(true, values.empty());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void valueFlowSwitchVariable() {
|
void valueFlowSwitchVariable() {
|
||||||
|
|
Loading…
Reference in New Issue