From: jason Date: Mon, 17 May 2010 19:53:45 +0000 (+0000) Subject: PR c++/44158 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=10181870015eae53c3e253dc28ed8aa5dd519a35;p=thirdparty%2Fgcc.git PR c++/44158 * call.c (build_over_call): Don't do bitwise copy for move ctor. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159508 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index acc111f75696..f06c6cd481af 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2010-05-17 Jason Merrill + + PR c++/44158 + * call.c (build_over_call): Don't do bitwise copy for move ctor. + 2010-05-17 Dodji Seketeli Jason Merrill diff --git a/gcc/cp/call.c b/gcc/cp/call.c index c0639920cf92..5d1300709c9a 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -5776,7 +5776,8 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) } /* [class.copy]: the copy constructor is implicitly defined even if the implementation elided its use. */ - else if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn))) + else if (TYPE_HAS_COMPLEX_INIT_REF (DECL_CONTEXT (fn)) + || move_fn_p (fn)) { mark_used (fn); already_used = true; @@ -5794,7 +5795,8 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain) { if (TREE_CODE (arg) == TARGET_EXPR) return arg; - else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn))) + else if (TYPE_HAS_TRIVIAL_INIT_REF (DECL_CONTEXT (fn)) + && !move_fn_p (fn)) return build_target_expr_with_type (arg, DECL_CONTEXT (fn)); } else if (TREE_CODE (arg) == TARGET_EXPR diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 17b9c512f17b..67cd4ad1e88f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-05-17 Jason Merrill + + PR c++/44158 + * g++.dg/cpp0x/rv-trivial-bug.C: Test copy-init too. + 2010-05-17 Martin Jambor * g++.dg/ipa/ivinline-1.C: New test. diff --git a/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C b/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C index de52d0f48f64..beb8acb5a501 100644 --- a/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C +++ b/gcc/testsuite/g++.dg/cpp0x/rv-trivial-bug.C @@ -19,7 +19,8 @@ int test2() base2 b2(b); assert(move_construct == 0); base2 b3(static_cast(b)); - assert(move_construct == 1); + base2 b4 = static_cast(b); + assert(move_construct == 2); b = b2; assert(move_assign == 0); b = static_cast(b2);