Commit b126811e by Richard Guenther Committed by Richard Biener

tree.h (can_trust_pointer_alignment): Remove.

2011-08-10  Richard Guenther  <rguenther@suse.de>

	* tree.h (can_trust_pointer_alignment): Remove.
	* builtins.c (can_trust_pointer_alignment): Remove.

	cp/
	* call.c (build_over_call): Call memcpy unconditionally.

From-SVN: r177625
parent 0e3a99ae
2011-08-10 Richard Guenther <rguenther@suse.de>
* tree.h (can_trust_pointer_alignment): Remove.
* builtins.c (can_trust_pointer_alignment): Remove.
2011-08-10 Artjoms Sinkarovs <artyom.shinakroff@gmail.com>
* c-typeck.c (scalar_to_vector): New function. Try scalar to
......
......@@ -453,16 +453,6 @@ get_object_alignment (tree exp)
return align;
}
/* Returns true iff we can trust that alignment information has been
calculated properly. */
bool
can_trust_pointer_alignment (void)
{
/* We rely on TER to compute accurate alignment information. */
return (optimize && flag_tree_ter);
}
/* Return the alignment in bits of EXP, a pointer valued expression.
The alignment returned is, by default, the alignment of the thing that
EXP points to. If it is not a POINTER_TYPE, 0 is returned.
......
2011-08-10 Richard Guenther <rguenther@suse.de>
* call.c (build_over_call): Call memcpy unconditionally.
2011-08-08 Jason Merrill <jason@redhat.com>
PR c++/50020
......
......@@ -6767,33 +6767,17 @@ 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.
FIXME fix 22488 so we can go back to using MODIFY_EXPR
instead of an explicit call to memcpy. */
Use __builtin_memcpy for the bitwise copy. */
tree arg0, arg1, arg2, t;
tree test = NULL_TREE;
arg2 = TYPE_SIZE_UNIT (as_base);
arg1 = arg;
arg0 = cp_build_addr_expr (to, complain);
if (!can_trust_pointer_alignment ())
{
/* If we can't be sure about pointer alignment, a call
to __builtin_memcpy is expanded as a call to memcpy, which
is invalid with identical args. Otherwise it is
expanded as a block move, which should be safe. */
arg0 = save_expr (arg0);
arg1 = save_expr (arg1);
test = build2 (EQ_EXPR, boolean_type_node, arg0, arg1);
}
t = implicit_built_in_decls[BUILT_IN_MEMCPY];
t = build_call_n (t, 3, arg0, arg1, arg2);
t = convert (TREE_TYPE (arg0), t);
if (test)
t = build3 (COND_EXPR, TREE_TYPE (t), test, arg0, t);
val = cp_build_indirect_ref (t, RO_NULL, complain);
TREE_NO_WARNING (val) = 1;
}
......
......@@ -5358,7 +5358,6 @@ extern tree build_va_arg_indirect_ref (tree);
extern tree build_string_literal (int, const char *);
extern bool validate_arglist (const_tree, ...);
extern rtx builtin_memset_read_str (void *, HOST_WIDE_INT, enum machine_mode);
extern bool can_trust_pointer_alignment (void);
extern bool is_builtin_name (const char *);
extern bool is_builtin_fn (tree);
extern unsigned int get_object_alignment_1 (tree, unsigned HOST_WIDE_INT *);
......
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