From 9fd8f60d1dd31235b31af53659807573b4b53c50 Mon Sep 17 00:00:00 2001 From: Tom Marshall Date: Fri, 28 May 2004 17:01:20 +0000 Subject: [PATCH] re PR c++/15214 (Warning non-virtual-dtor too strict) PR c++/15214 * class.c (finish_struct_1): Warn only if the dtor is non-private or the class has friends. From-SVN: r82366 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/class.c | 11 ++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 92b10d062d0..b65da55ef54 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2004-05-20 Tom Marshall + + PR c++/15214 + * class.c (finish_struct_1): Warn only if the dtor is non-private or + the class has friends. + 2004-05-27 Adam Nemet PR c++/12883 diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 47c60e7851d..0fdd748a7af 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -5185,7 +5185,16 @@ finish_struct_1 (tree t) if (warn_nonvdtor && TYPE_POLYMORPHIC_P (t) && TYPE_HAS_DESTRUCTOR (t) && DECL_VINDEX (TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (t), 1)) == NULL_TREE) - warning ("`%#T' has virtual functions but non-virtual destructor", t); + + { + tree dtor = TREE_VEC_ELT (CLASSTYPE_METHOD_VEC (t), 1); + + /* Warn only if the dtor is non-private or the class has friends */ + if (!TREE_PRIVATE (dtor) || + (CLASSTYPE_FRIEND_CLASSES (t) || + DECL_FRIENDLIST (TYPE_MAIN_DECL (t)))) + warning ("%#T' has virtual functions but non-virtual destructor", t); + } complete_vars (t); -- 2.30.2