Commit 4d20f490 by Jason Merrill Committed by Jason Merrill

init.c (build_dtor_call): Use build_special_member_call.

	* init.c (build_dtor_call): Use build_special_member_call.

	(build_delete): Remove redundant uses of save_addr.

From-SVN: r259771
parent 94b2a1e5
2018-04-30 Jason Merrill <jason@redhat.com> 2018-04-30 Jason Merrill <jason@redhat.com>
* init.c (build_dtor_call): Use build_special_member_call.
(build_delete): Remove redundant uses of save_addr.
* decl.c (build_clobber_this): Use build_clobber. * decl.c (build_clobber_this): Use build_clobber.
2018-04-27 Jakub Jelinek <jakub@redhat.com> 2018-04-27 Jakub Jelinek <jakub@redhat.com>
......
...@@ -4536,7 +4536,6 @@ build_dtor_call (tree exp, special_function_kind dtor_kind, int flags, ...@@ -4536,7 +4536,6 @@ build_dtor_call (tree exp, special_function_kind dtor_kind, int flags,
tsubst_flags_t complain) tsubst_flags_t complain)
{ {
tree name; tree name;
tree fn;
switch (dtor_kind) switch (dtor_kind)
{ {
case sfk_complete_destructor: case sfk_complete_destructor:
...@@ -4554,13 +4553,12 @@ build_dtor_call (tree exp, special_function_kind dtor_kind, int flags, ...@@ -4554,13 +4553,12 @@ build_dtor_call (tree exp, special_function_kind dtor_kind, int flags,
default: default:
gcc_unreachable (); gcc_unreachable ();
} }
fn = lookup_fnfields (TREE_TYPE (exp), name, /*protect=*/2);
return build_new_method_call (exp, fn, return build_special_member_call (exp, name,
/*args=*/NULL, /*args=*/NULL,
/*conversion_path=*/NULL_TREE, /*binfo=*/TREE_TYPE (exp),
flags, flags,
/*fn_p=*/NULL, complain);
complain);
} }
/* Generate a call to a destructor. TYPE is the type to cast ADDR to. /* Generate a call to a destructor. TYPE is the type to cast ADDR to.
...@@ -4650,8 +4648,6 @@ build_delete (tree otype, tree addr, special_function_kind auto_delete, ...@@ -4650,8 +4648,6 @@ build_delete (tree otype, tree addr, special_function_kind auto_delete,
} }
} }
} }
if (TREE_SIDE_EFFECTS (addr))
addr = save_expr (addr);
/* Throw away const and volatile on target type of addr. */ /* Throw away const and volatile on target type of addr. */
addr = convert_force (build_pointer_type (type), addr, 0, complain); addr = convert_force (build_pointer_type (type), addr, 0, complain);
...@@ -4664,8 +4660,6 @@ build_delete (tree otype, tree addr, special_function_kind auto_delete, ...@@ -4664,8 +4660,6 @@ build_delete (tree otype, tree addr, special_function_kind auto_delete,
addr = cp_build_addr_expr (addr, complain); addr = cp_build_addr_expr (addr, complain);
if (addr == error_mark_node) if (addr == error_mark_node)
return error_mark_node; return error_mark_node;
if (TREE_SIDE_EFFECTS (addr))
addr = save_expr (addr);
addr = convert_force (build_pointer_type (type), addr, 0, complain); addr = convert_force (build_pointer_type (type), addr, 0, complain);
} }
......
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