diff options
author | Nathan Sidwell <nathan@acm.org> | 2016-03-31 16:18:27 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2016-03-31 16:18:27 +0000 |
commit | 8f80cbdb26ca754ff3b6fe6c735eca6dd01401fa (patch) | |
tree | bad2b6cc426221a683c0fb7f1a3cf59c473c2cd6 | |
parent | 865c2770db7c23218e8c47f6200b54dbc4ccc179 (diff) | |
download | gcc-8f80cbdb26ca754ff3b6fe6c735eca6dd01401fa.zip gcc-8f80cbdb26ca754ff3b6fe6c735eca6dd01401fa.tar.gz gcc-8f80cbdb26ca754ff3b6fe6c735eca6dd01401fa.tar.bz2 |
decl.c (start_preparsed_function): Remove unnecessary bracing.
* decl.c (start_preparsed_function): Remove unnecessary bracing.
(finish_destructor_body): Don't emit operator delete here.
From-SVN: r234640
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/decl.c | 33 |
2 files changed, 6 insertions, 32 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4a6dc51..d457acc 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 2016-03-31 Nathan Sidwell <nathan@acm.org> + * decl.c (start_preparsed_function): Remove unnecessary bracing. + (finish_destructor_body): Don't emit operator delete here. + +2016-03-31 Nathan Sidwell <nathan@acm.org> + PR c++/70393 * constexpr.c (cxx_eval_store_expression): Keep CONSTRUCTOR elements in field order. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 4730093..a6c5855 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -14170,9 +14170,7 @@ start_preparsed_function (tree decl1, tree attrs, int flags) if (DECL_DESTRUCTOR_P (decl1) || (DECL_CONSTRUCTOR_P (decl1) && targetm.cxx.cdtor_returns_this ())) - { - cdtor_label = create_artificial_label (input_location); - } + cdtor_label = create_artificial_label (input_location); start_fname_decls (); @@ -14428,35 +14426,6 @@ finish_destructor_body (void) and member cleanups will be run when the function returns. */ add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label)); - /* In a virtual destructor, we must call delete. */ - if (DECL_VIRTUAL_P (current_function_decl)) - { - tree if_stmt; - tree virtual_size = cxx_sizeof (current_class_type); - - /* [class.dtor] - - At the point of definition of a virtual destructor (including - an implicit definition), non-placement operator delete shall - be looked up in the scope of the destructor's class and if - found shall be accessible and unambiguous. */ - exprstmt = build_op_delete_call (DELETE_EXPR, current_class_ptr, - virtual_size, - /*global_p=*/false, - /*placement=*/NULL_TREE, - /*alloc_fn=*/NULL_TREE, - tf_warning_or_error); - - if_stmt = begin_if_stmt (); - finish_if_stmt_cond (build2 (BIT_AND_EXPR, integer_type_node, - current_in_charge_parm, - integer_one_node), - if_stmt); - finish_expr_stmt (exprstmt); - finish_then_clause (if_stmt); - finish_if_stmt (if_stmt); - } - if (targetm.cxx.cdtor_returns_this ()) { tree val; |