call.c (convert_default_arg): Avoid redundant copy.
* call.c (convert_default_arg): Avoid redundant copy. * tree.c (bot_manip): Copy everything. From-SVN: r179016
This commit is contained in:
parent
c067f4dbc0
commit
a4d25b444d
3 changed files with 15 additions and 12 deletions
|
@ -1,3 +1,8 @@
|
|||
2011-09-20 Jason Merrill <jason@redhat.com>
|
||||
|
||||
* call.c (convert_default_arg): Avoid redundant copy.
|
||||
* tree.c (bot_manip): Copy everything.
|
||||
|
||||
2011-09-20 Roberto Agostino Vitillo <ravitillo@lbl.gov>
|
||||
|
||||
* call.c (build_new_method_call_1): Use non-virtual lookup
|
||||
|
|
|
@ -6130,6 +6130,8 @@ convert_default_arg (tree type, tree arg, tree fn, int parmnum)
|
|||
|
||||
we must not perform access checks here. */
|
||||
push_deferring_access_checks (dk_no_check);
|
||||
/* We must make a copy of ARG, in case subsequent processing
|
||||
alters any part of it. */
|
||||
arg = break_out_target_exprs (arg);
|
||||
if (TREE_CODE (arg) == CONSTRUCTOR)
|
||||
{
|
||||
|
@ -6140,14 +6142,6 @@ convert_default_arg (tree type, tree arg, tree fn, int parmnum)
|
|||
}
|
||||
else
|
||||
{
|
||||
/* We must make a copy of ARG, in case subsequent processing
|
||||
alters any part of it. For example, during gimplification a
|
||||
cast of the form (T) &X::f (where "f" is a member function)
|
||||
will lead to replacing the PTRMEM_CST for &X::f with a
|
||||
VAR_DECL. We can avoid the copy for constants, since they
|
||||
are never modified in place. */
|
||||
if (!CONSTANT_CLASS_P (arg))
|
||||
arg = unshare_expr (arg);
|
||||
arg = convert_for_initialization (0, type, arg, LOOKUP_IMPLICIT,
|
||||
ICR_DEFAULT_ARGUMENT, fn, parmnum,
|
||||
tf_warning_or_error);
|
||||
|
|
|
@ -1865,9 +1865,13 @@ bot_manip (tree* tp, int* walk_subtrees, void* data)
|
|||
|
||||
if (!TYPE_P (t) && TREE_CONSTANT (t) && !TREE_SIDE_EFFECTS (t))
|
||||
{
|
||||
/* There can't be any TARGET_EXPRs or their slot variables below
|
||||
this point. */
|
||||
/* There can't be any TARGET_EXPRs or their slot variables below this
|
||||
point. But we must make a copy, in case subsequent processing
|
||||
alters any part of it. For example, during gimplification a cast
|
||||
of the form (T) &X::f (where "f" is a member function) will lead
|
||||
to replacing the PTRMEM_CST for &X::f with a VAR_DECL. */
|
||||
*walk_subtrees = 0;
|
||||
*tp = unshare_expr (t);
|
||||
return NULL_TREE;
|
||||
}
|
||||
if (TREE_CODE (t) == TARGET_EXPR)
|
||||
|
@ -1928,8 +1932,8 @@ bot_replace (tree* t,
|
|||
|
||||
/* When we parse a default argument expression, we may create
|
||||
temporary variables via TARGET_EXPRs. When we actually use the
|
||||
default-argument expression, we make a copy of the expression, but
|
||||
we must replace the temporaries with appropriate local versions. */
|
||||
default-argument expression, we make a copy of the expression
|
||||
and replace the temporaries with appropriate local versions. */
|
||||
|
||||
tree
|
||||
break_out_target_exprs (tree t)
|
||||
|
|
Loading…
Add table
Reference in a new issue