From b126811e7dc390fe0dec552e6e7911b0dfbe2ecc Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Wed, 10 Aug 2011 15:08:14 +0000 Subject: [PATCH] tree.h (can_trust_pointer_alignment): Remove. 2011-08-10 Richard Guenther * 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 --- gcc/ChangeLog | 5 +++++ gcc/builtins.c | 10 ---------- gcc/cp/ChangeLog | 4 ++++ gcc/cp/call.c | 18 +----------------- gcc/tree.h | 1 - 5 files changed, 10 insertions(+), 28 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7d5b492..a727916 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2011-08-10 Richard Guenther + + * tree.h (can_trust_pointer_alignment): Remove. + * builtins.c (can_trust_pointer_alignment): Remove. + 2011-08-10 Artjoms Sinkarovs * c-typeck.c (scalar_to_vector): New function. Try scalar to diff --git a/gcc/builtins.c b/gcc/builtins.c index 723e07f4..6c16821 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -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. diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 65a2701..be846ce 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2011-08-10 Richard Guenther + + * call.c (build_over_call): Call memcpy unconditionally. + 2011-08-08 Jason Merrill PR c++/50020 diff --git a/gcc/cp/call.c b/gcc/cp/call.c index b0133e2..4494ecc 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -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; } diff --git a/gcc/tree.h b/gcc/tree.h index 2fa5999..c8d292a 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -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 *); -- 2.7.4