From 25846cf223505601e146375af7c39f421aca3be6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 30 Jul 2014 18:12:33 +0200 Subject: [PATCH] ValueFlow: Fix for if/else valueflow analysis --- lib/valueflow.cpp | 5 +++++ test/testvalueflow.cpp | 7 +++++++ 2 files changed, 12 insertions(+) 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"