]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/2136 (g++ seems to disregard '::' in '::delete')
authorJason Merrill <jason@redhat.com>
Wed, 20 Mar 2002 20:09:06 +0000 (15:09 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 20 Mar 2002 20:09:06 +0000 (15:09 -0500)
        PR c++/2136
        * init.c (build_delete): Check access for a member op delete here.
        * decl2.c (delete_sanity): Not here.

From-SVN: r51082

gcc/cp/ChangeLog
gcc/cp/decl2.c
gcc/cp/init.c

index 3dc96215666087f2212d33c5882b409bc4f700c3..68f3be03c37ad3137da6b3ea3b9244774ad4adb8 100644 (file)
@@ -1,3 +1,9 @@
+2002-03-20  Jason Merrill  <jason@redhat.com>
+
+       PR c++/2136
+       * init.c (build_delete): Check access for a member op delete here.
+       * decl2.c (delete_sanity): Not here.
+
 2002-03-18  Jason Merrill  <jason@redhat.com>
 
        PR c++/4222, c++/5995
index 0f279bc0d53a57fe931242bb613f29570b6fb719..8cff1cb3e80776a70f3ae5938f0eb9e3a8c86c5e 100644 (file)
@@ -1230,21 +1230,8 @@ delete_sanity (exp, size, doing_vec, use_global_delete)
     return build_vec_delete (t, maxindex, sfk_deleting_destructor,
                             use_global_delete);
   else
-    {
-      if (IS_AGGR_TYPE (TREE_TYPE (type))
-         && TYPE_GETS_REG_DELETE (TREE_TYPE (type)))
-       {
-         /* Only do access checking here; we'll be calling op delete
-            from the destructor.  */
-         tree tmp = build_op_delete_call (DELETE_EXPR, t, size_zero_node,
-                                          LOOKUP_NORMAL, NULL_TREE);
-         if (tmp == error_mark_node)
-           return error_mark_node;
-       }
-
-      return build_delete (type, t, sfk_deleting_destructor,
-                          LOOKUP_NORMAL, use_global_delete);
-    }
+    return build_delete (type, t, sfk_deleting_destructor,
+                        LOOKUP_NORMAL, use_global_delete);
 }
 
 /* Report an error if the indicated template declaration is not the
index e16e8be92936f68baa11b0f4c55b5759ea43c087..0e150fdbfdae0db7af2fa783e12ef50bd80f438b 100644 (file)
@@ -3289,6 +3289,14 @@ build_delete (type, addr, auto_delete, flags, use_global_delete)
          /* Call the complete object destructor.  */
          auto_delete = sfk_complete_destructor;
        }
+      else if (auto_delete == sfk_deleting_destructor
+              && TYPE_GETS_REG_DELETE (type))
+       {
+         /* Make sure we have access to the member op delete, even though
+            we'll actually be calling it from the destructor.  */
+         build_op_delete_call (DELETE_EXPR, addr, c_sizeof_nowarn (type),
+                               LOOKUP_NORMAL, NULL_TREE);
+       }
 
       expr = build_dtor_call (build_indirect_ref (addr, NULL_PTR),
                              auto_delete, flags);