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