aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2016-03-31 16:18:27 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2016-03-31 16:18:27 +0000
commit8f80cbdb26ca754ff3b6fe6c735eca6dd01401fa (patch)
treebad2b6cc426221a683c0fb7f1a3cf59c473c2cd6
parent865c2770db7c23218e8c47f6200b54dbc4ccc179 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/cp/decl.c33
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;