From 82f030df2c3c11f14a6c1f340d707d8efeaca1dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sat, 29 May 2010 11:19:28 +0200 Subject: [PATCH] the virtual destructor error message needs to be restricted. marked the checking as inconclusive for now. --- lib/checkclass.cpp | 7 +++++++ test/testclass.cpp | 8 ++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lib/checkclass.cpp b/lib/checkclass.cpp index 088d23f79..1bf64d987 100644 --- a/lib/checkclass.cpp +++ b/lib/checkclass.cpp @@ -1352,6 +1352,13 @@ void CheckClass::operatorEqToSelf() void CheckClass::virtualDestructor() { + // This error should only be given if: + // * base class doesn't have virtual destructor + // * derived class has non-empty destructor + // * base class is deleted + if (!_settings->inconclusive) + return; + const char pattern_classdecl[] = "class %var% : %var%"; const Token *derived = _tokenizer->tokens(); diff --git a/test/testclass.cpp b/test/testclass.cpp index 8a5e8b852..d6d9e9a6a 100644 --- a/test/testclass.cpp +++ b/test/testclass.cpp @@ -1211,7 +1211,7 @@ private: checkVirtualDestructor("class Base { };\n" "class Derived : public Base { public: ~Derived() { (void)11; } };"); - ASSERT_EQUALS("[test.cpp:1]: (error) Class Base which is inherited by class Derived does not have a virtual destructor\n", errout.str()); + ASSERT_EQUALS("", errout.str()); checkVirtualDestructor("class Base { };\n" "class Derived : Base { public: ~Derived() { (void)11; } };"); @@ -1224,11 +1224,11 @@ private: checkVirtualDestructor("class Base { public: ~Base(); };\n" "class Derived : public Base { public: ~Derived() { (void)11; } };"); - ASSERT_EQUALS("[test.cpp:1]: (error) Class Base which is inherited by class Derived does not have a virtual destructor\n", errout.str()); + ASSERT_EQUALS("", errout.str()); checkVirtualDestructor("class Base { public: ~Base(); };\n" "class Derived : private Fred, public Base { public: ~Derived() { (void)11; } };"); - ASSERT_EQUALS("[test.cpp:1]: (error) Class Base which is inherited by class Derived does not have a virtual destructor\n", errout.str()); + ASSERT_EQUALS("", errout.str()); } void virtualDestructor4() @@ -1386,7 +1386,7 @@ private: " public:\n" " ~B(){int a;}\n" "};\n"); - ASSERT_EQUALS("[test.cpp:7]: (error) Class AA which is inherited by class B does not have a virtual destructor\n", errout.str()); + ASSERT_EQUALS("", errout.str()); } void checkUninitVar(const char code[])