From 63e2f64b9c3e29dc5794980c1208548485a28ec3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 14 Dec 2011 18:54:03 +0100 Subject: [PATCH] Uninitialized variables: Fixed false positives for loops. Ticket: #3369 --- lib/checkuninitvar.cpp | 6 ++++++ test/testuninitvar.cpp | 10 ++++++++++ 2 files changed, 16 insertions(+) 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"