diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 4d9467fc5..a3bb2f479 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -723,7 +723,7 @@ static void execute(const Token *expr, else if (expr->str() == "=") { execute(expr->astOperand2(), programMemory, result, error); - if (expr->astOperand1() && expr->astOperand1()->varId()) + if (!*error && expr->astOperand1() && expr->astOperand1()->varId()) (*programMemory)[expr->astOperand1()->varId()] = *result; else *error = true; diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 2b4589317..3b6089bcd 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -743,6 +743,13 @@ private: " 0 : a[x];\n" "}"; ASSERT_EQUALS(false, testValueOfX(code, 4U, 0)); + + code = "void f() {\n" + " int x;\n" + " for (int i = 0; x = bar[i]; i++)\n" + " x;\n" + "}"; + ASSERT_EQUALS(false, testValueOfX(code, 4U, 0)); } void valueFlowSubFunction() {