diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 8f6bc787f..465a013d4 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1115,6 +1115,12 @@ bool CheckUninitVar::checkScopeForVariable(const Token *tok, const unsigned int } } + // TODO: handle loops etc + if (Token::simpleMatch(tok, ") {")) { + ret = true; + return false; + } + if (Token::Match(tok, "return|break|continue|throw")) ret = true; diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 91d77bafc..23f7ba75b 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -1754,6 +1754,16 @@ private: "}\n"); ASSERT_EQUALS("", errout.str()); + // for, while + checkUninitVar2("void f() {\n" + " int x;\n" + " while (a) {\n" + " if (b) x++;\n" + " else x = 0;\n" + " }\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + // exit checkUninitVar2("void f() {\n" " int x;\n"