OSDN Git Service

PR c++/15214
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 28 May 2004 17:01:20 +0000 (17:01 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 28 May 2004 17:01:20 +0000 (17:01 +0000)
        * class.c (finish_struct_1): Warn only if the dtor is non-private or
        the class has friends.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@82366 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/class.c

index 92b10d0..b65da55 100644 (file)
@@ -1,3 +1,9 @@
+2004-05-20  Tom Marshall  <tmarshall@real.com>
+
+       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  <anemet@lnxw.com>
 
        PR c++/12883
index 47c60e7..0fdd748 100644 (file)
@@ -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);