From: Nico Weber Date: Wed, 16 Dec 2015 20:07:24 +0000 (+0000) Subject: Let -Wdelete-non-virtual-dtor mention final. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=76888cf66cbc1ad4b1b281399ed2b83ce308e036;p=clang Let -Wdelete-non-virtual-dtor mention final. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@255812 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index f4eba6eedc..21d5b8583a 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -5797,7 +5797,8 @@ def warn_non_virtual_dtor : Warning< "%0 has virtual functions but non-virtual destructor">, InGroup, DefaultIgnore; def warn_delete_non_virtual_dtor : Warning< - "delete called on %0 that has virtual functions but non-virtual destructor">, + "delete called on non-final %0 that has virtual functions " + "but non-virtual destructor">, InGroup, DefaultIgnore; def warn_delete_abstract_non_virtual_dtor : Warning< "delete called on %0 that is abstract but has non-virtual destructor">, diff --git a/test/SemaCXX/destructor.cpp b/test/SemaCXX/destructor.cpp index 60cb0ef090..e7323f90b3 100644 --- a/test/SemaCXX/destructor.cpp +++ b/test/SemaCXX/destructor.cpp @@ -217,8 +217,8 @@ class simple_ptr { public: simple_ptr(T* t): _ptr(t) {} ~simple_ptr() { delete _ptr; } // \ - // expected-warning {{delete called on 'dnvd::B' that has virtual functions but non-virtual destructor}} \ - // expected-warning {{delete called on 'dnvd::D' that has virtual functions but non-virtual destructor}} + // expected-warning {{delete called on non-final 'dnvd::B' that has virtual functions but non-virtual destructor}} \ + // expected-warning {{delete called on non-final 'dnvd::D' that has virtual functions but non-virtual destructor}} T& operator*() const { return *_ptr; } private: T* _ptr; @@ -228,7 +228,7 @@ template class simple_ptr2 { public: simple_ptr2(T* t): _ptr(t) {} - ~simple_ptr2() { delete _ptr; } // expected-warning {{delete called on 'dnvd::B' that has virtual functions but non-virtual destructor}} + ~simple_ptr2() { delete _ptr; } // expected-warning {{delete called on non-final 'dnvd::B' that has virtual functions but non-virtual destructor}} T& operator*() const { return *_ptr; } private: T* _ptr; @@ -314,15 +314,15 @@ void nowarn0() { void warn0() { { B* b = new B(); - delete b; // expected-warning {{delete called on 'dnvd::B' that has virtual functions but non-virtual destructor}} + delete b; // expected-warning {{delete called on non-final 'dnvd::B' that has virtual functions but non-virtual destructor}} } { B* b = new D(); - delete b; // expected-warning {{delete called on 'dnvd::B' that has virtual functions but non-virtual destructor}} + delete b; // expected-warning {{delete called on non-final 'dnvd::B' that has virtual functions but non-virtual destructor}} } { D* d = new D(); - delete d; // expected-warning {{delete called on 'dnvd::D' that has virtual functions but non-virtual destructor}} + delete d; // expected-warning {{delete called on non-final 'dnvd::D' that has virtual functions but non-virtual destructor}} } }