// 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; };