Commit c7edeea3 by Alexandre Oliva Committed by Alexandre Oliva

cp-tree.h (build_vec_delete): Remove `auto_delete' argument.

* cp-tree.h (build_vec_delete): Remove `auto_delete' argument.
* init.c (build_vec_delete, build_vec_delete_1): Likewise.
Always destruct virtual bases of array components, but never
delete them.
(build_vec_init): Adjust invocations.
(build_delete): Likewise.
* decl2.c (delete_sanity): Likewise.

From-SVN: r30606
parent 5f1e6755
1999-11-21 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
* cp-tree.h (build_vec_delete): Remove `auto_delete' argument.
* init.c (build_vec_delete, build_vec_delete_1): Likewise.
Always destruct virtual bases of array components, but never
delete them.
(build_vec_init): Adjust invocations.
(build_delete): Likewise.
* decl2.c (delete_sanity): Likewise.
1999-11-19 Nathan Sidwell <nathan@acm.org> 1999-11-19 Nathan Sidwell <nathan@acm.org>
* cp-tree.h (grok_method_quals): Return this pointer qualifiers. * cp-tree.h (grok_method_quals): Return this pointer qualifiers.
......
...@@ -3659,7 +3659,7 @@ extern tree build_vec_init PROTO((tree, tree, tree, tree, int)); ...@@ -3659,7 +3659,7 @@ extern tree build_vec_init PROTO((tree, tree, tree, tree, int));
extern tree build_x_delete PROTO((tree, int, tree)); extern tree build_x_delete PROTO((tree, int, tree));
extern tree build_delete PROTO((tree, tree, tree, int, int)); extern tree build_delete PROTO((tree, tree, tree, int, int));
extern tree build_vbase_delete PROTO((tree, tree)); extern tree build_vbase_delete PROTO((tree, tree));
extern tree build_vec_delete PROTO((tree, tree, tree, tree, int)); extern tree build_vec_delete PROTO((tree, tree, tree, int));
extern tree create_temporary_var PROTO((tree)); extern tree create_temporary_var PROTO((tree));
extern void begin_init_stmts PROTO((tree *, tree *)); extern void begin_init_stmts PROTO((tree *, tree *));
extern tree finish_init_stmts PROTO((tree, tree)); extern tree finish_init_stmts PROTO((tree, tree));
......
...@@ -1194,8 +1194,7 @@ delete_sanity (exp, size, doing_vec, use_global_delete) ...@@ -1194,8 +1194,7 @@ delete_sanity (exp, size, doing_vec, use_global_delete)
return build1 (NOP_EXPR, void_type_node, t); return build1 (NOP_EXPR, void_type_node, t);
if (doing_vec) if (doing_vec)
return build_vec_delete (t, maxindex, integer_one_node, return build_vec_delete (t, maxindex, integer_one_node, use_global_delete);
integer_zero_node, use_global_delete);
else else
{ {
if (IS_AGGR_TYPE (TREE_TYPE (type)) if (IS_AGGR_TYPE (TREE_TYPE (type))
......
...@@ -37,8 +37,7 @@ static void expand_aggr_vbase_init_1 PROTO((tree, tree, tree, tree)); ...@@ -37,8 +37,7 @@ static void expand_aggr_vbase_init_1 PROTO((tree, tree, tree, tree));
static void construct_virtual_bases PROTO((tree, tree, tree, tree, tree)); static void construct_virtual_bases PROTO((tree, tree, tree, tree, tree));
static void expand_aggr_init_1 PROTO((tree, tree, tree, tree, int)); static void expand_aggr_init_1 PROTO((tree, tree, tree, tree, int));
static void expand_default_init PROTO((tree, tree, tree, tree, int)); static void expand_default_init PROTO((tree, tree, tree, tree, int));
static tree build_vec_delete_1 PROTO((tree, tree, tree, tree, tree, static tree build_vec_delete_1 PROTO((tree, tree, tree, tree, int));
int));
static void perform_member_init PROTO((tree, tree, tree, int)); static void perform_member_init PROTO((tree, tree, tree, int));
static void sort_base_init PROTO((tree, tree *, tree *)); static void sort_base_init PROTO((tree, tree *, tree *));
static tree build_builtin_delete_call PROTO((tree)); static tree build_builtin_delete_call PROTO((tree));
...@@ -2434,10 +2433,9 @@ build_new_1 (exp) ...@@ -2434,10 +2433,9 @@ build_new_1 (exp)
} }
static tree static tree
build_vec_delete_1 (base, maxindex, type, auto_delete_vec, auto_delete, build_vec_delete_1 (base, maxindex, type, auto_delete_vec, use_global_delete)
use_global_delete)
tree base, maxindex, type; tree base, maxindex, type;
tree auto_delete_vec, auto_delete; tree auto_delete_vec;
int use_global_delete; int use_global_delete;
{ {
tree virtual_size; tree virtual_size;
...@@ -2481,29 +2479,10 @@ build_vec_delete_1 (base, maxindex, type, auto_delete_vec, auto_delete, ...@@ -2481,29 +2479,10 @@ build_vec_delete_1 (base, maxindex, type, auto_delete_vec, auto_delete,
controller = build (BIND_EXPR, void_type_node, tbase, NULL_TREE, NULL_TREE); controller = build (BIND_EXPR, void_type_node, tbase, NULL_TREE, NULL_TREE);
TREE_SIDE_EFFECTS (controller) = 1; TREE_SIDE_EFFECTS (controller) = 1;
if (auto_delete != integer_zero_node
&& auto_delete != integer_two_node)
{
tree base_tbd = cp_convert (ptype,
build_binary_op (MINUS_EXPR,
cp_convert (ptr_type_node, base),
BI_header_size));
/* This is the real size */
virtual_size = size_binop (PLUS_EXPR, virtual_size, BI_header_size);
body = build_expr_list (NULL_TREE,
build_x_delete (base_tbd,
2 | use_global_delete,
virtual_size));
body = fold (build (COND_EXPR, void_type_node,
fold (build (BIT_AND_EXPR, integer_type_node,
auto_delete, integer_one_node)),
body, integer_zero_node));
}
else
body = NULL_TREE; body = NULL_TREE;
body = tree_cons (NULL_TREE, body = tree_cons (NULL_TREE,
build_delete (ptype, tbase, auto_delete, build_delete (ptype, tbase, integer_two_node,
LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 1), LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 1),
body); body);
...@@ -2909,7 +2888,6 @@ build_vec_init (decl, base, maxindex, init, from_array) ...@@ -2909,7 +2888,6 @@ build_vec_init (decl, base, maxindex, init, from_array)
iterator), iterator),
type, type,
/*auto_delete_vec=*/integer_zero_node, /*auto_delete_vec=*/integer_zero_node,
/*auto_delete=*/integer_zero_node,
/*use_global_delete=*/0); /*use_global_delete=*/0);
finish_cleanup (e, try_block); finish_cleanup (e, try_block);
} }
...@@ -3014,8 +2992,7 @@ build_delete (type, addr, auto_delete, flags, use_global_delete) ...@@ -3014,8 +2992,7 @@ build_delete (type, addr, auto_delete, flags, use_global_delete)
return error_mark_node; return error_mark_node;
} }
return build_vec_delete (addr, array_type_nelts (type), return build_vec_delete (addr, array_type_nelts (type),
auto_delete, integer_zero_node, auto_delete, use_global_delete);
use_global_delete);
} }
else else
{ {
...@@ -3209,7 +3186,6 @@ build_vbase_delete (type, decl) ...@@ -3209,7 +3186,6 @@ build_vbase_delete (type, decl)
BASE is the expression that should yield the store to be deleted. BASE is the expression that should yield the store to be deleted.
This function expands (or synthesizes) these calls itself. This function expands (or synthesizes) these calls itself.
AUTO_DELETE_VEC says whether the container (vector) should be deallocated. AUTO_DELETE_VEC says whether the container (vector) should be deallocated.
AUTO_DELETE say whether each item in the container should be deallocated.
This also calls delete for virtual baseclasses of elements of the vector. This also calls delete for virtual baseclasses of elements of the vector.
...@@ -3221,10 +3197,9 @@ build_vbase_delete (type, decl) ...@@ -3221,10 +3197,9 @@ build_vbase_delete (type, decl)
be worth bothering.) */ be worth bothering.) */
tree tree
build_vec_delete (base, maxindex, auto_delete_vec, auto_delete, build_vec_delete (base, maxindex, auto_delete_vec, use_global_delete)
use_global_delete)
tree base, maxindex; tree base, maxindex;
tree auto_delete_vec, auto_delete; tree auto_delete_vec;
int use_global_delete; int use_global_delete;
{ {
tree type; tree type;
...@@ -3266,6 +3241,6 @@ build_vec_delete (base, maxindex, auto_delete_vec, auto_delete, ...@@ -3266,6 +3241,6 @@ build_vec_delete (base, maxindex, auto_delete_vec, auto_delete,
return error_mark_node; return error_mark_node;
} }
return build_vec_delete_1 (base, maxindex, type, auto_delete_vec, auto_delete, return build_vec_delete_1 (base, maxindex, type, auto_delete_vec,
use_global_delete); use_global_delete);
} }
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