call.c (build_over_call): Instead of memcpy use an assignment of two MEM_REFs.
2011-08-12 Richard Guenther <rguenther@suse.de> * call.c (build_over_call): Instead of memcpy use an assignment of two MEM_REFs. From-SVN: r177691
This commit is contained in:
parent
f895fc2a0d
commit
6aeb8c9919
2 changed files with 17 additions and 9 deletions
|
@ -1,3 +1,8 @@
|
|||
2011-08-12 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* call.c (build_over_call): Instead of memcpy use an
|
||||
assignment of two MEM_REFs.
|
||||
|
||||
2011-08-11 Romain Geissler <romain.geissler@gmail.com>
|
||||
Brian Hackett <bhackett1024@gmail.com>
|
||||
|
||||
|
|
|
@ -6766,19 +6766,22 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
|
|||
}
|
||||
else
|
||||
{
|
||||
/* We must only copy the non-tail padding parts.
|
||||
Use __builtin_memcpy for the bitwise copy. */
|
||||
tree arg0, arg1, arg2, t;
|
||||
/* We must only copy the non-tail padding parts. */
|
||||
tree arg0, arg2, t;
|
||||
tree array_type, alias_set;
|
||||
|
||||
arg2 = TYPE_SIZE_UNIT (as_base);
|
||||
arg1 = arg;
|
||||
arg0 = cp_build_addr_expr (to, complain);
|
||||
|
||||
t = implicit_built_in_decls[BUILT_IN_MEMCPY];
|
||||
t = build_call_n (t, 3, arg0, arg1, arg2);
|
||||
|
||||
t = convert (TREE_TYPE (arg0), t);
|
||||
val = cp_build_indirect_ref (t, RO_NULL, complain);
|
||||
array_type = build_array_type (char_type_node,
|
||||
build_index_type
|
||||
(size_binop (MINUS_EXPR,
|
||||
arg2, size_int (1))));
|
||||
alias_set = build_int_cst (build_pointer_type (type), 0);
|
||||
t = build2 (MODIFY_EXPR, void_type_node,
|
||||
build2 (MEM_REF, array_type, arg0, alias_set),
|
||||
build2 (MEM_REF, array_type, arg, alias_set));
|
||||
val = build2 (COMPOUND_EXPR, TREE_TYPE (to), t, to);
|
||||
TREE_NO_WARNING (val) = 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue