Commit e2ab8a0f by Jonathan Wakely Committed by Jonathan Wakely

re PR c++/49605 (-Wdelete-non-virtual-dtor is not picky enough)

2011-07-01  Jonathan Wakely  <jwakely.gcc@gmail.com>

	PR c++/49605
	* init.c (build_delete): Only warn for sfk_deleting_destructor.

From-SVN: r175771
parent 2eb22389
2011-07-01 Jonathan Wakely <jwakely.gcc@gmail.com>
PR c++/49605
* init.c (build_delete): Only warn for sfk_deleting_destructor.
2011-07-01 Jakub Jelinek <jakub@redhat.com>
* Make-lang.in (cp/decl.o): Depend on pointer-set.h.
......
......@@ -3467,8 +3467,9 @@ build_delete (tree type, tree addr, special_function_kind auto_delete,
}
complete_p = false;
}
else if (warn_delnonvdtor && MAYBE_CLASS_TYPE_P (type)
&& !CLASSTYPE_FINAL (type) && TYPE_POLYMORPHIC_P (type))
else if (auto_delete == sfk_deleting_destructor && warn_delnonvdtor
&& MAYBE_CLASS_TYPE_P (type) && !CLASSTYPE_FINAL (type)
&& TYPE_POLYMORPHIC_P (type))
{
tree dtor;
dtor = CLASSTYPE_DESTRUCTORS (type);
......
2011-07-01 Jonathan Wakely <jwakely.gcc@gmail.com>
PR c++/49605
* g++.dg/warn/delete-non-virtual-dtor.C: Adjust.
2011-07-01 Jason Merrill <jason@redhat.com>
PR c++/48261
......
......@@ -5,6 +5,7 @@ struct polyBase { virtual void f(); };
void f(polyBase* p, polyBase* arr)
{
polyBase pb;
delete p; // { dg-warning "non-virtual destructor might" }
delete [] arr;
}
......@@ -13,6 +14,7 @@ struct polyDerived : polyBase { };
void f(polyDerived* p, polyDerived* arr)
{
polyDerived pd;
delete p; // { dg-warning "non-virtual destructor might" }
delete [] arr;
}
......@@ -29,6 +31,7 @@ struct finalDerived final : polyBase { };
void f(finalDerived* p, finalDerived* arr)
{
finalDerived fd;
delete p; // no error for final classes
delete [] arr;
}
......@@ -38,7 +41,26 @@ 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 "non-virtual destructor might" }
delete [] arr;
}
struct polyDerivedNT : polyBaseNonTrivial { ~polyDerivedNT(); };
void f(polyDerivedNT* p, polyDerivedNT* arr)
{
polyDerivedNT pdnt;
delete p; // { dg-warning "non-virtual destructor might" }
delete [] arr;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment