Commit e79a6b40 by Jason Merrill Committed by Jason Merrill

init.c (build_vec_delete_1): Look for sfk_deleting_destructor to decide whether to delete.

	* init.c (build_vec_delete_1): Look for sfk_deleting_destructor to
	decide whether to delete.
	(build_vec_init): Pass sfk_complete_destructor.

From-SVN: r173057
parent c12ff9d8
2011-04-27 Jason Merrill <jason@redhat.com> 2011-04-27 Jason Merrill <jason@redhat.com>
* init.c (build_vec_delete_1): Look for sfk_deleting_destructor to
decide whether to delete.
(build_vec_init): Pass sfk_complete_destructor.
PR c++/40975 PR c++/40975
* cp-tree.def (VEC_INIT_EXPR): Add third operand. * cp-tree.def (VEC_INIT_EXPR): Add third operand.
* cp-tree.h (VEC_INIT_EXPR_NELTS): New. * cp-tree.h (VEC_INIT_EXPR_NELTS): New.
......
...@@ -2793,9 +2793,8 @@ build_vec_delete_1 (tree base, tree maxindex, tree type, ...@@ -2793,9 +2793,8 @@ build_vec_delete_1 (tree base, tree maxindex, tree type,
loop = build_compound_expr (input_location, tbase_init, loop); loop = build_compound_expr (input_location, tbase_init, loop);
no_destructor: no_destructor:
/* If the delete flag is one, or anything else with the low bit set, /* Delete the storage if appropriate. */
delete the storage. */ if (auto_delete_vec == sfk_deleting_destructor)
if (auto_delete_vec != sfk_base_destructor)
{ {
tree base_tbd; tree base_tbd;
...@@ -2824,7 +2823,6 @@ build_vec_delete_1 (tree base, tree maxindex, tree type, ...@@ -2824,7 +2823,6 @@ build_vec_delete_1 (tree base, tree maxindex, tree type,
virtual_size = size_binop (PLUS_EXPR, virtual_size, cookie_size); virtual_size = size_binop (PLUS_EXPR, virtual_size, cookie_size);
} }
if (auto_delete_vec == sfk_deleting_destructor)
deallocate_expr = build_op_delete_call (VEC_DELETE_EXPR, deallocate_expr = build_op_delete_call (VEC_DELETE_EXPR,
base_tbd, virtual_size, base_tbd, virtual_size,
use_global_delete & 1, use_global_delete & 1,
...@@ -3284,7 +3282,7 @@ build_vec_init (tree base, tree maxindex, tree init, ...@@ -3284,7 +3282,7 @@ build_vec_init (tree base, tree maxindex, tree init,
finish_cleanup_try_block (try_block); finish_cleanup_try_block (try_block);
e = build_vec_delete_1 (rval, m, e = build_vec_delete_1 (rval, m,
inner_elt_type, sfk_base_destructor, inner_elt_type, sfk_complete_destructor,
/*use_global_delete=*/0, complain); /*use_global_delete=*/0, complain);
if (e == error_mark_node) if (e == error_mark_node)
errors = true; errors = true;
......
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