From 894a2435ae572d979e2a9377e87f884a88f72948 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Mon, 8 Apr 2013 19:34:39 +0200 Subject: [PATCH] Fixed #4718 (False positive: unititialized variable (value flow)) --- lib/checkuninitvar.cpp | 3 +++ test/testuninitvar.cpp | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index d3b17b1ac..cbb041ed9 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1235,6 +1235,9 @@ bool CheckUninitVar::checkScopeForVariable(const Scope* scope, const Token *tok, return true; } + if (alwaysTrue && noreturnIf) + return true; + std::map varValueIf; if (!initif && !noreturnIf) { for (const Token *tok2 = tok; tok2 && tok2 != tok->link(); tok2 = tok2->next()) { diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 1d4fac0bc..b86b742be 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -2563,6 +2563,14 @@ private: "}"); ASSERT_EQUALS("", errout.str()); + checkUninitVar2("int f(int x) {\n" + " int y;\n" + " if (x) y = do_something();\n" + " if (!x) return 0;\n" + " return y;\n" + "}"); + ASSERT_EQUALS("", errout.str()); + // Unknown => bail out.. checkUninitVar2("void f(int x) {\n" " int i;\n"