diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index a4bcd78ff..4fe32f45c 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -993,6 +993,13 @@ static bool valueFlowForward(Token * const startToken, } } + if (Token::Match(tok2, "[;{}] %name% :")) { + for (std::list::iterator it = values.begin(); it != values.end(); ++it) + it->changeKnownToPossible(); + tok2 = tok2->tokAt(2); + continue; + } + if (Token::Match(tok2, "sizeof|typeof|typeid (")) tok2 = tok2->linkAt(1); diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 32820ee54..89620c9e0 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -1651,6 +1651,15 @@ private: ASSERT_EQUALS(1, value.intvalue); ASSERT(value.isPossible()); + code = "void f() {\n" + " int x = 0;\n" + "a:\n" + " a = x + 1;\n" // <- possible value + "}"; + value = valueOfTok(code, "+"); + ASSERT_EQUALS(1, value.intvalue); + ASSERT(value.isPossible()); + // after condition code = "int f(int x) {\n" " if (x == 4) {}\n"