From 5c9be4a0df5459ec1af8aefdc1988899d17d61b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Tue, 26 Jan 2016 16:10:15 +0100 Subject: [PATCH] Fixed #7216 (ValueFlow: known value in condition) --- lib/valueflow.cpp | 3 ++- test/testvalueflow.cpp | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 3a8b8f095..53e8664c2 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -1116,7 +1116,8 @@ static bool valueFlowForward(Token * const startToken, } // if known variable is changed in loop body, change it to a possible value.. - handleKnownValuesInLoop(tok2, tok2->linkAt(1)->linkAt(1), &values, varid); + if (Token::Match(tok2, "for|while")) + handleKnownValuesInLoop(tok2, tok2->linkAt(1)->linkAt(1), &values, varid); // Set values in condition for (Token* tok3 = tok2->tokAt(2); tok3 != tok2->next()->link(); tok3 = tok3->next()) { diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 57f484325..22ba4b37a 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -1753,6 +1753,14 @@ private: ASSERT_EQUALS(3, value.intvalue); ASSERT(value.isKnown()); + code = "void f() {\n" + " int x = 15;\n" + " if (x == 15) { x += 7; }\n" // <- condition is true + "}"; + value = valueOfTok(code, "=="); + ASSERT_EQUALS(1, value.intvalue); + ASSERT(value.isKnown()); + code = "void f() {\n" " int x;\n" " if (ab) { x = 7; }\n"