Fix #7829 (false-positive: knownConditionTrueFalse linked to virtual method)
Return values of virtual functions in valueflow are only possible values since function might be overloaded.
This commit is contained in:
parent
87abe1174f
commit
e0d4720e19
|
@ -2709,7 +2709,10 @@ static void valueFlowFunctionReturn(TokenList *tokenlist, ErrorLogger *errorLogg
|
|||
&error);
|
||||
if (!error) {
|
||||
ValueFlow::Value v(result);
|
||||
v.setKnown();
|
||||
if (function->isVirtual())
|
||||
v.setPossible();
|
||||
else
|
||||
v.setKnown();
|
||||
setTokenValue(tok, v, tokenlist->getSettings());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1897,6 +1897,25 @@ private:
|
|||
" f1(0);\n"
|
||||
"}";
|
||||
ASSERT_EQUALS(false, testValueOfX(code, 3U, 0));
|
||||
|
||||
code = "class A\n"
|
||||
"{\n"
|
||||
" void f1(int x) { return x; }\n"
|
||||
" void f2(int x) {\n"
|
||||
" f1(123);\n"
|
||||
" }\n"
|
||||
"};";
|
||||
ASSERT_EQUALS(true, testValueOfX(code, 3U, 123));
|
||||
|
||||
code = "class A\n"
|
||||
"{\n"
|
||||
" virtual void f1(int x) { return x; }\n"
|
||||
" void f2(int x) {\n"
|
||||
" f1(123);\n"
|
||||
" }\n"
|
||||
"};";
|
||||
ASSERT_EQUALS(true, testValueOfX(code, 3U, 123));
|
||||
|
||||
}
|
||||
|
||||
void valueFlowFunctionReturn() {
|
||||
|
@ -1941,6 +1960,30 @@ private:
|
|||
" return 0;\n"
|
||||
"}";
|
||||
ASSERT_EQUALS(false, testValueOfX(code, 4U, ValueFlow::Value::MovedVariable));
|
||||
|
||||
code = "class A\n"
|
||||
"{\n"
|
||||
" int f1(int x) {\n"
|
||||
" return x+1;\n"
|
||||
" }\n"
|
||||
" void f2() {\n"
|
||||
" x = 10 - f1(2);\n"
|
||||
" }\n"
|
||||
"};";
|
||||
ASSERT_EQUALS(7, valueOfTok(code, "-").intvalue);
|
||||
ASSERT_EQUALS(true, valueOfTok(code, "-").isKnown());
|
||||
|
||||
code = "class A\n"
|
||||
"{\n"
|
||||
" virtual int f1(int x) {\n"
|
||||
" return x+1;\n"
|
||||
" }\n"
|
||||
" void f2() {\n"
|
||||
" x = 10 - f1(2);\n"
|
||||
" }\n"
|
||||
"};";
|
||||
ASSERT_EQUALS(7, valueOfTok(code, "-").intvalue);
|
||||
ASSERT_EQUALS(false, valueOfTok(code, "-").isKnown());
|
||||
}
|
||||
|
||||
void valueFlowFunctionDefaultParameter() {
|
||||
|
|
Loading…
Reference in New Issue