Article View: gnu.g++.bug
Article #1844Overloaded delete operator bug
From: Michael Tiemann
Date: Mon, 10 Apr 1989 16:26
Date: Mon, 10 Apr 1989 16:26
76 lines
2962 bytes
2962 bytes
Here is a fix for GNU C++ wrt overloading operator delete. Your line
numbers will vary.
yahi% diff -c2 cplus-init.c~ cplus-init.c
*** cplus-init.c~ Sun Apr 2 04:03:25 1989
--- cplus-init.c Mon Apr 10 09:20:40 1989
***************
*** 2600,2603 ****
--- 2604,2608 ----
tree exprstmt = NULL_TREE;
tree parent_auto_delete = auto_delete;
+ tree cond;
/* If this type does not have a destructor, but does have
***************
*** 2608,2616 ****
{
parent_auto_delete = integer_zero_node;
! expr = build_opfncall (DELETE_EXPR, addr, addr);
! if (expr == error_mark_node)
! return error_mark_node;
! exprstmt = build_tree_list (NULL_TREE, expr);
}
if (basetype && TYPE_NEEDS_DESTRUCTOR (basetype))
--- 2613,2641 ----
{
parent_auto_delete = integer_zero_node;
! if (auto_delete == integer_zero_node)
! cond = NULL_TREE;
! else
! {
! expr = build_opfncall (DELETE_EXPR, addr, addr);
! if (expr == error_mark_node)
! return error_mark_node;
! if (auto_delete != integer_one_node)
! cond = build (COND_EXPR, void_type_node,
! build (NE_EXPR, integer_type_node, auto_delete, integer_zero_node),
! expr,
! build (NOP_EXPR, void_type_node, integer_zero_node));
! else cond = expr;
! }
! }
! else if (basetype == NULL_TREE
! || ! TYPE_NEEDS_DESTRUCTOR (basetype))
! {
! cond = build (COND_EXPR, void_type_node,
! build (NE_EXPR, integer_type_node, auto_delete, integer_zero_node),
! build_function_call (BID, build_tree_list (NULL_TREE, addr)),
! build (NOP_EXPR, void_type_node, integer_zero_node));
}
+ if (cond)
+ exprstmt = build_tree_list (NULL_TREE, cond);
if (basetype && TYPE_NEEDS_DESTRUCTOR (basetype))
***************
*** 2625,2639 ****
exprstmt);
}
- else
- {
- tree cond = build (COND_EXPR, void_type_node,
- build (NE_EXPR, integer_type_node, auto_delete, integer_zero_node),
- (TREE_GETS_DELETE (type)
- ? build_opfncall (DELETE_EXPR, addr, addr)
- : build_function_call (BID, build_tree_list (NULL_TREE, addr))),
- build (NOP_EXPR, void_type_node, integer_zero_node));
-
- exprstmt = build_tree_list (NULL_TREE, cond);
- }
for (i = 2; i <= n_baseclasses; i++)
--- 2650,2653 ----
Michael
Technical Details
Message-ID:
<8904101626.AA24379@yahi.stanford.edu>Path:
arc1-ca.pugleaf.net!utzoo!telly!attcan!dptcdc!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!YAHI.STANFORD.EDU!tiemannReferences:
<AA26080.8904101226.snipe@uk.ac.newcastle>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!telly!attcan!dptcdc!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!YAHI.STANFORD.EDU!tiemann From: tiemann@YAHI.STANFORD.EDU (Michael Tiemann) Newsgroups: gnu.g++.bug Subject: Overloaded delete operator bug Message-ID: <8904101626.AA24379@yahi.stanford.edu> Date: 10 Apr 89 16:26:39 GMT References: <AA26080.8904101226.snipe@uk.ac.newcastle> Sender: daemon@tut.cis.ohio-state.edu Reply-To: tiemann@lurch.stanford.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 76