Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/warn/delete-non-virtual-dtor.C @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
// { dg-options "-Wdelete-non-virtual-dtor" } // { dg-do compile { target c++11 } } struct polyBase { virtual void f(); }; void f(polyBase* p, polyBase* arr) { polyBase pb; delete p; // { dg-warning "3:deleting \[^\n\r]* non-virtual destructor might" } delete [] arr; } struct polyDerived : polyBase { }; void f(polyDerived* p, polyDerived* arr) { polyDerived pd; delete p; // { dg-warning "3:deleting \[^\n\r]* non-virtual destructor might" } delete [] arr; } struct absDerived : polyBase { virtual void g() = 0; }; void f(absDerived* p, absDerived* arr) { delete p; // { dg-warning "3:deleting \[^\n\r]* non-virtual destructor will" } delete [] arr; } struct finalDerived final : polyBase { }; void f(finalDerived* p, finalDerived* arr) { finalDerived fd; delete p; // no error for final classes delete [] arr; } struct safeBase { virtual ~safeBase(); }; struct safeDerived : safeBase { virtual void f(); }; void f(safeDerived* p, safeDerived* arr) { safeDerived sd; delete p; // no error because base has virtual dtor delete [] arr; } struct polyBaseNonTrivial { ~polyBaseNonTrivial(); virtual void f(); }; void f(polyBaseNonTrivial* p, polyBaseNonTrivial* arr) { polyBaseNonTrivial pbnt; delete p; // { dg-warning "3:deleting \[^\n\r]* non-virtual destructor might" } delete [] arr; } struct polyDerivedNT : polyBaseNonTrivial { ~polyDerivedNT(); }; void f(polyDerivedNT* p, polyDerivedNT* arr) { polyDerivedNT pdnt; delete p; // { dg-warning "3:deleting \[^\n\r]* non-virtual destructor might" } delete [] arr; }