From 1f04e2c228d2253f1b4efa2ec1751c1c1ad80995 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 13 Mar 2013 17:32:47 +0100 Subject: [PATCH] Fixed #4439 (False positive: Uninitialized variable (casting address)) --- lib/checkuninitvar.cpp | 2 ++ test/testuninitvar.cpp | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 51666003f..fb51da8f2 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -1534,6 +1534,8 @@ bool CheckUninitVar::isVariableUsage(const Token *vartok, bool pointer, bool cpp return false; // address of if (tok2 && tok2->str() == ")") tok2 = tok2->link()->previous(); + if (Token::Match(tok2,") ( %type% *| ) &") && tok2->tokAt(2)->varId() == 0) + return false; // cast while (tok2 && tok2->str() == "(") tok2 = tok2->previous(); while (tok2 && tok2->str() == "*") diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index bb80459fa..d8abfd897 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -2344,6 +2344,12 @@ private: " if (&a == &b);\n" "}"); ASSERT_EQUALS("", errout.str()); + + checkUninitVar2("void f() {\n" // #4439 - cast address of uninitialized variable + " int a;\n" + " x((A)(B)&a);\n" + "}"); + ASSERT_EQUALS("", errout.str()); } // #3869 - reference variable