From 37dbebb0933f153799270e23668dd80bce59d188 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 8 Nov 2015 14:08:47 +0100 Subject: [PATCH] Fixed #7049 (valueflow: value is not known after case) --- lib/valueflow.cpp | 2 +- test/testvalueflow.cpp | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 4f313c7ec..418782a32 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -1105,7 +1105,7 @@ static bool valueFlowForward(Token * const startToken, } } - if (Token::Match(tok2, "[;{}] %name% :")) { + if (Token::Match(tok2, "[;{}] %name% :") || tok2->str() == "case") { for (std::list::iterator it = values.begin(); it != values.end(); ++it) it->changeKnownToPossible(); tok2 = tok2->tokAt(2); diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 0455fc6c5..513f9ab09 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -1729,6 +1729,17 @@ private: "}"; ASSERT(isNotKnownValues(code, "!")); + code = "void f() {\n" // #7049 + " int x = 0;\n" + " switch (a) {\n" + " case 1:\n" + " x = 1;\n" + " case 2:\n" + " if (!x) {}\n" // <- possible value + " }\n" + "}"; + ASSERT(isNotKnownValues(code, "!")); + code = "void f() {\n" " int x = 0;\n" " while (!x) {\n" // <- possible value