decl.c (cxx_maybe_build_cleanup): Always set LOOKUP_NONVIRTUAL.
* decl.c (cxx_maybe_build_cleanup): Always set LOOKUP_NONVIRTUAL. * decl2.c (build_cleanup): Just call cxx_maybe_build_cleanup. From-SVN: r204265
This commit is contained in:
parent
1c79ebd522
commit
b8aaa1a3b9
3 changed files with 7 additions and 27 deletions
|
@ -1,5 +1,8 @@
|
|||
2013-10-31 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* decl.c (cxx_maybe_build_cleanup): Always set LOOKUP_NONVIRTUAL.
|
||||
* decl2.c (build_cleanup): Just call cxx_maybe_build_cleanup.
|
||||
|
||||
PR c++/58162
|
||||
* parser.c (cp_parser_late_parse_one_default_arg): Set
|
||||
TARGET_EXPR_DIRECT_INIT_P.
|
||||
|
|
|
@ -14298,9 +14298,7 @@ cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
|
|||
type = TREE_TYPE (decl);
|
||||
if (type_build_dtor_call (type))
|
||||
{
|
||||
int flags = LOOKUP_NORMAL|LOOKUP_DESTRUCTOR;
|
||||
bool has_vbases = (TREE_CODE (type) == RECORD_TYPE
|
||||
&& CLASSTYPE_VBASECLASSES (type));
|
||||
int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
|
||||
tree addr;
|
||||
tree call;
|
||||
|
||||
|
@ -14309,10 +14307,6 @@ cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
|
|||
else
|
||||
addr = build_address (decl);
|
||||
|
||||
/* Optimize for space over speed here. */
|
||||
if (!has_vbases || flag_expensive_optimizations)
|
||||
flags |= LOOKUP_NONVIRTUAL;
|
||||
|
||||
call = build_delete (TREE_TYPE (addr), addr,
|
||||
sfk_complete_destructor, flags, 0, complain);
|
||||
if (call == error_mark_node)
|
||||
|
|
|
@ -2722,26 +2722,9 @@ import_export_decl (tree decl)
|
|||
tree
|
||||
build_cleanup (tree decl)
|
||||
{
|
||||
tree temp;
|
||||
tree type = TREE_TYPE (decl);
|
||||
|
||||
/* This function should only be called for declarations that really
|
||||
require cleanups. */
|
||||
gcc_assert (!TYPE_HAS_TRIVIAL_DESTRUCTOR (type));
|
||||
|
||||
/* Treat all objects with destructors as used; the destructor may do
|
||||
something substantive. */
|
||||
mark_used (decl);
|
||||
|
||||
if (TREE_CODE (type) == ARRAY_TYPE)
|
||||
temp = decl;
|
||||
else
|
||||
temp = build_address (decl);
|
||||
temp = build_delete (TREE_TYPE (temp), temp,
|
||||
sfk_complete_destructor,
|
||||
LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0,
|
||||
tf_warning_or_error);
|
||||
return temp;
|
||||
tree clean = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
|
||||
gcc_assert (clean != NULL_TREE);
|
||||
return clean;
|
||||
}
|
||||
|
||||
/* Returns the initialization guard variable for the variable DECL,
|
||||
|
|
Loading…
Add table
Reference in a new issue