From 323019c48fff40c0603c049825d09694d5e3bfd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 30 Nov 2011 21:28:16 +0100 Subject: [PATCH] Fixed #3355 (False positive: member variable initialization (::ZeroMemory)) --- lib/checkclass.cpp | 5 ++++- test/testclass.cpp | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/checkclass.cpp b/lib/checkclass.cpp index f18f915b7..d9421843d 100644 --- a/lib/checkclass.cpp +++ b/lib/checkclass.cpp @@ -395,7 +395,10 @@ void CheckClass::initializeVarList(const Function &func, std::list else { assignAllVar(usage); } - } else if (Token::Match(ftok, "%var% (") && ftok->str() != "if") { + } else if (Token::Match(ftok, "::| %var% (") && ftok->str() != "if") { + if (ftok->str() == "::") + ftok = ftok->next(); + // Passing "this" => assume that everything is initialized for (const Token *tok2 = ftok->next()->link(); tok2 && tok2 != ftok; tok2 = tok2->previous()) { if (tok2->str() == "this") { diff --git a/test/testclass.cpp b/test/testclass.cpp index 7df685e4b..553c744e0 100644 --- a/test/testclass.cpp +++ b/test/testclass.cpp @@ -76,6 +76,7 @@ private: TEST_CASE(uninitVarArray5); TEST_CASE(uninitVarArray6); TEST_CASE(uninitVarArray7); + TEST_CASE(uninitVarArray8); TEST_CASE(uninitVarArray2D); TEST_CASE(uninitVarArray3D); TEST_CASE(uninitVarStruct1); // ticket #2172 @@ -2424,6 +2425,15 @@ private: ASSERT_EQUALS("", errout.str()); } + void uninitVarArray8() { + checkUninitVar("class Foo {\n" + " char a[10];\n" + "public:\n" + " Foo() { ::ZeroMemory(a); }\n" + "}"); + ASSERT_EQUALS("", errout.str()); + } + void uninitVarArray2D() { checkUninitVar("class John\n" "{\n"