From 6997d3888174166c543e2e93baf792813443cb1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Thu, 27 Jun 2013 18:28:00 +0200 Subject: [PATCH] Uninitialized variables: fixed false positive in while loop --- lib/checkuninitvar.cpp | 12 +++++++----- test/testuninitvar.cpp | 9 +++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 3f320c040..a596214a9 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1503,12 +1503,14 @@ bool CheckUninitVar::checkLoopBody(const Token *tok, const Variable& var, const } else { if (isVariableUsage(tok, var.isPointer(), _tokenizer->isCPP())) usetok = tok; - else if (tok->strAt(1) == "=") { + else { bool assign = true; - for (const Token *tok2 = tok->next(); tok2 && tok2->str() != ";"; tok2 = tok2->next()) { - if (tok2->varId() == var.varId()) { - assign = false; - break; + if (tok->strAt(1) == "=") { + for (const Token *tok2 = tok->next(); tok2 && tok2->str() != ";"; tok2 = tok2->next()) { + if (tok2->varId() == var.varId()) { + assign = false; + break; + } } } if (assign) diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 650bcd52a..6ffbad6ed 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -2842,6 +2842,15 @@ private: "}"); ASSERT_EQUALS("[test.cpp:4]: (error) Uninitialized variable: x\n", errout.str()); + checkUninitVar2("void f() {\n" + " int x;\n" + " while (a) {\n" + " init(&x);\n" + " x++;\n" + " }\n" + "}"); + ASSERT_EQUALS("", errout.str()); + checkUninitVar2("void f() {\n" " int x;\n" " while (a) {\n"