From 1bb7a1c23c5c88544c2d659b842b679f7735bb14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 24 Jul 2011 22:26:11 +0200 Subject: [PATCH] Fixed #2938 (Uninitialized variable not detected when part of expression) --- lib/checkuninitvar.cpp | 12 ++++++++++++ test/testuninitvar.cpp | 7 +++++++ 2 files changed, 19 insertions(+) diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 577863b22..f4423836a 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -471,6 +471,18 @@ private: } } + if (tok.str() == "return") + { + for (const Token *tok2 = tok.next(); tok2 && tok2->str() != ";"; tok2 = tok2->next()) + { + if (tok2->isName() && tok2->strAt(1) == "(") + tok2 = tok2->next()->link(); + + else if (tok2->varId()) + use(checks, tok2); + } + } + if (tok.varId()) { // array variable passed as function parameter.. diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 73e9db1cb..e1de38c4a 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -168,6 +168,13 @@ private: "}\n"); ASSERT_EQUALS("[test.cpp:4]: (error) Uninitialized variable: ret\n", errout.str()); + checkUninitVar("static int foo()\n" + "{\n" + " int ret;\n" + " return ret+5;\n" + "}\n"); + ASSERT_EQUALS("[test.cpp:4]: (error) Uninitialized variable: ret\n", errout.str()); + checkUninitVar("void f()\n" "{\n" " int a;\n"