diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index d570cc0a1ff..d44b5351cd2 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -802,11 +802,11 @@ static void setTokenValue(Token* tok, ValueFlow::Value value, const Settings* se // increment else if (parent->str() == "++") { for (const ValueFlow::Value &val : tok->values()) { - if (!val.isIntValue() && !val.isFloatValue()) + if (!val.isIntValue() && !val.isFloatValue() && !val.isSymbolicValue()) continue; ValueFlow::Value v(val); if (parent == tok->previous()) { - if (v.isIntValue()) + if (v.isIntValue() || v.isSymbolicValue()) v.intvalue = v.intvalue + 1; else v.floatValue = v.floatValue + 1.0; @@ -818,11 +818,11 @@ static void setTokenValue(Token* tok, ValueFlow::Value value, const Settings* se // decrement else if (parent->str() == "--") { for (const ValueFlow::Value &val : tok->values()) { - if (!val.isIntValue() && !val.isFloatValue()) + if (!val.isIntValue() && !val.isFloatValue() && !val.isSymbolicValue()) continue; ValueFlow::Value v(val); if (parent == tok->previous()) { - if (v.isIntValue()) + if (v.isIntValue() || v.isSymbolicValue()) v.intvalue = v.intvalue - 1; else v.floatValue = v.floatValue - 1.0; diff --git a/test/testcondition.cpp b/test/testcondition.cpp index a46e0b2d236..5cfc68d501a 100644 --- a/test/testcondition.cpp +++ b/test/testcondition.cpp @@ -3826,6 +3826,16 @@ class TestCondition : public TestFixture { "}\n"); ASSERT_EQUALS("[test.cpp:4]: (style) Condition 'z<1' is always false\n", errout.str()); + check("bool f(int &index, const int s, const double * const array, double & x) {\n" + " if (index >= s)\n" + " return false;\n" + " else {\n" + " x = array[index];\n" + " return (index++) >= s;\n" + " }\n" + "}\n"); + ASSERT_EQUALS("[test.cpp:6]: (style) Condition '(index++)>=s' is always false\n", errout.str()); + check("struct a {\n" " a *b() const;\n" "} c;\n"