diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 1942ea4aa..f609dd168 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -381,7 +381,7 @@ static void setTokenValue(Token* tok, const ValueFlow::Value &value, const Setti result.condition = value1->condition ? value1->condition : value2->condition; result.inconclusive = value1->inconclusive | value2->inconclusive; result.varId = (value1->varId != 0U) ? value1->varId : value2->varId; - result.varvalue = (result.varId == value1->varId) ? value1->intvalue : value2->intvalue; + result.varvalue = (result.varId == value1->varId) ? value1->varvalue : value2->varvalue; if (value1->valueKind == value2->valueKind) result.valueKind = value1->valueKind; const float floatValue1 = value1->isIntValue() ? value1->intvalue : value1->floatValue; diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index f106acb5f..6813c2ffc 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -408,6 +408,12 @@ private: ASSERT_EQUALS(4, values.front().intvalue); ASSERT_EQUALS(16, values.back().intvalue); + code = "void f(int x) {\n" + " if (x == 3) {}\n" + " a = x * (1 - x - 1);\n" + "}"; + ASSERT_EQUALS(-9, valueOfTok(code, "*").intvalue); + // addition of different variables with known values code = "int f(int x) {\n" " int a = 1;\n"