// PR c++/7302 // { dg-do compile } // { dg-options "-Wnon-virtual-dtor" } // Warn when a class has virtual functions and accessible non-virtual // destructor, in which case it would be possible but unsafe to delete // an instance of a derived class through a pointer to the base class. struct A // { dg-bogus "non-virtual destructor" } { protected: ~A(); public: virtual void f() = 0; }; struct B // { dg-bogus "non-virtual destructor" } { private: ~B(); public: virtual void f() = 0; }; struct C // { dg-warning "non-virtual destructor" } { virtual void f() = 0; }; struct D // { dg-warning "non-virtual destructor" } { ~D(); virtual void f() = 0; }; struct E; struct F // { dg-warning "non-virtual destructor" } { protected: friend class E; ~F(); public: virtual void f() = 0; }; struct G // { dg-warning "non-virtual destructor" } { private: friend class E; ~G(); public: virtual void f() = 0; };