diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 1f8c5b003..c89b08e35 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -1043,6 +1043,11 @@ static void execute(const Token *expr, execute(expr->astOperand2(), programMemory, result, error); } + else if (expr->str() == "!") { + execute(expr->astOperand1(), programMemory, result, error); + *result = !(*result); + } + else *error = true; } diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 0d50a5c28..275576116 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -708,6 +708,13 @@ private: "}"; ASSERT_EQUALS(false, testValueOfX(code, 4U, 0)); + code = "void f() {\n" + " int x = 0;\n" + " if (!x) {}\n" + " else { y = x; }\n" + "}"; + ASSERT_EQUALS(false, testValueOfX(code, 4U, 0)); + // multivariables code = "void f(int a) {\n" " int x = a;\n"