From c77786a7453086ddb461788c5481ce15f661bc03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 25 Jun 2014 06:17:44 +0200 Subject: [PATCH] valueFlowAfterCondition: wrong analysis for floats --- lib/valueflow.cpp | 3 +-- test/testvalueflow.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index c540372ca..75b40e13f 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -787,9 +787,8 @@ static void valueFlowAfterCondition(TokenList *tokenlist, ErrorLogger *errorLogg vartok = tok->astOperand2(); numtok = tok->astOperand1(); } - if (!vartok->isName() || !numtok->isNumber()) + if (!vartok->isName() || !numtok->isNumber() || !MathLib::isInt(numtok->str())) continue; - } else if (tok->str() == "!") { vartok = tok->astOperand1(); numtok = nullptr; diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index af2ff8027..bafa427d9 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -790,6 +790,13 @@ private: " x);\n" "}"; ASSERT_EQUALS(true, testValueOfX(code, 3U, 4)); + + // TODO: float + code = "void f(float x) {\n" + " if (x == 0.5) {}\n" + " a = x;\n" + "}"; + ASSERT_EQUALS(false, testValueOfX(code, 3U, 0)); } void valueFlowBitAnd() {