From 22583269c1218723174be19a73306c311df18a6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Wed, 14 Jan 2009 19:34:10 +0000 Subject: [PATCH] Uninitialized member variables: Checking enum variables --- src/checkclass.cpp | 2 ++ test/testclass.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/checkclass.cpp b/src/checkclass.cpp index 0b333670b..de0f479eb 100644 --- a/src/checkclass.cpp +++ b/src/checkclass.cpp @@ -87,6 +87,8 @@ struct CheckClass::VAR *CheckClass::ClassChecking_GetVarList(const Token *tok1) { if (next->isStandardType()) varname = next->strAt(1); + else if (Token::findmatch(_tokenizer->tokens(), ("enum " + next->str()).c_str())) + varname = next->strAt(1); } // Pointer? diff --git a/test/testclass.cpp b/test/testclass.cpp index 65bf216cb..6162ee5b0 100644 --- a/test/testclass.cpp +++ b/test/testclass.cpp @@ -41,6 +41,8 @@ private: TEST_CASE(virtualDestructor3); // Base class has a destructor, but it's not virtual TEST_CASE(virtualDestructor4); // Derived class doesn't have a destructor => no error TEST_CASE(virtualDestructor5); // Derived class has empty destructor => no error + + TEST_CASE(uninitVar1); } // Check that base classes have virtual destructors @@ -124,6 +126,45 @@ private: "class Derived : public Base { public: ~Derived(); }; Derived::~Derived() {}"); ASSERT_EQUALS(std::string(""), errout.str()); } + + + void checkUninitVar(const char code[]) + { + // Tokenize.. + Tokenizer tokenizer; + std::istringstream istr(code); + tokenizer.tokenize(istr, "test.cpp"); + tokenizer.simplifyTokenList(); + + // Clear the error log + errout.str(""); + + // Check.. + Settings settings; + CheckClass checkClass(&tokenizer, settings, this); + checkClass.constructors(); + } + + void uninitVar1() + { + checkUninitVar("enum ECODES\n" + "{\n" + " CODE_1 = 0,\n" + " CODE_2 = 1\n" + "};\n" + "\n" + "class Fred\n" + "{\n" + "public:\n" + " Fred() {}\n" + "\n" + "private:\n" + " ECODES _code;\n" + "};\n" ); + + ASSERT_EQUALS("[test.cpp:10]: Uninitialized member variable 'Fred::_code'\n", errout.str()); + } + }; REGISTER_TEST(TestClass)