From ae36472a1b4d0bff3c4ab3ccbb8927efa9015840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Fri, 14 Jun 2013 07:21:53 +0200 Subject: [PATCH] Fixed #4778 (FP: Uninitialized variable: av) --- lib/checkuninitvar.cpp | 2 +- test/testuninitvar.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 7cb672fc4..98d189782 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1542,7 +1542,7 @@ bool CheckUninitVar::isVariableUsage(const Token *vartok, bool pointer, bool cpp // is there something like: ; "*((&var ..expr.. =" => the variable is assigned if (vartok->previous()->str() == "&") { const Token *tok2 = vartok->tokAt(-2); - if (tok2 && (tok2->isConstOp() || tok2->str() == "(")) + if (tok2 && (tok2->isConstOp() || Token::Match(tok2, "[;{}(]"))) return false; // address of if (tok2 && tok2->str() == ")") tok2 = tok2->link()->previous(); diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index e44792f18..6cf9eefd4 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -2376,6 +2376,12 @@ private: "}"); ASSERT_EQUALS("", errout.str()); + checkUninitVar2("void f() {\n" // #4778 - cast address of uninitialized variable + " long a;\n" + " &a;\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + checkUninitVar2("void f() {\n" // #4717 - ({}) " int a = ({ long b = (long)(123); 2 + b; });\n" "}", "test.c", false);