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> 2011-08-10 Artjoms Sinkarovs <artyom.shinakroff@gmail.com>
* c-typeck.c (scalar_to_vector): New function. Try scalar to * c-typeck.c (scalar_to_vector): New function. Try scalar to
......
...@@ -453,16 +453,6 @@ get_object_alignment (tree exp) ...@@ -453,16 +453,6 @@ get_object_alignment (tree exp)
return align; 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. /* Return the alignment in bits of EXP, a pointer valued expression.
The alignment returned is, by default, the alignment of the thing that 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. 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> 2011-08-08 Jason Merrill <jason@redhat.com>
PR c++/50020 PR c++/50020
......
...@@ -6767,33 +6767,17 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) ...@@ -6767,33 +6767,17 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
else else
{ {
/* We must only copy the non-tail padding parts. /* We must only copy the non-tail padding parts.
Use __builtin_memcpy for the bitwise copy. 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. */
tree arg0, arg1, arg2, t; tree arg0, arg1, arg2, t;
tree test = NULL_TREE;
arg2 = TYPE_SIZE_UNIT (as_base); arg2 = TYPE_SIZE_UNIT (as_base);
arg1 = arg; arg1 = arg;
arg0 = cp_build_addr_expr (to, complain); 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 = implicit_built_in_decls[BUILT_IN_MEMCPY];
t = build_call_n (t, 3, arg0, arg1, arg2); t = build_call_n (t, 3, arg0, arg1, arg2);
t = convert (TREE_TYPE (arg0), t); 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); val = cp_build_indirect_ref (t, RO_NULL, complain);
TREE_NO_WARNING (val) = 1; TREE_NO_WARNING (val) = 1;
} }
......
...@@ -5358,7 +5358,6 @@ extern tree build_va_arg_indirect_ref (tree); ...@@ -5358,7 +5358,6 @@ extern tree build_va_arg_indirect_ref (tree);
extern tree build_string_literal (int, const char *); extern tree build_string_literal (int, const char *);
extern bool validate_arglist (const_tree, ...); extern bool validate_arglist (const_tree, ...);
extern rtx builtin_memset_read_str (void *, HOST_WIDE_INT, enum machine_mode); 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_name (const char *);
extern bool is_builtin_fn (tree); extern bool is_builtin_fn (tree);
extern unsigned int get_object_alignment_1 (tree, unsigned HOST_WIDE_INT *); 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