Commit f91352dc by Jason Merrill Committed by Jason Merrill

re PR c++/46103 ([c++0x] moving from std::array copies the elements)

	PR c++/46103
	* init.c (build_vec_init): Handle memberwise move.

From-SVN: r165849
parent 4490cae6
2010-10-22 Jason Merrill <jason@redhat.com>
PR c++/46103
* init.c (build_vec_init): Handle memberwise move.
2010-10-21 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/46117
......
......@@ -2849,6 +2849,7 @@ build_vec_init (tree base, tree maxindex, tree init,
tree try_block = NULL_TREE;
int num_initialized_elts = 0;
bool is_global;
bool xvalue = false;
if (TREE_CODE (atype) == ARRAY_TYPE && TYPE_DOMAIN (atype))
maxindex = array_type_nelts (atype);
......@@ -2939,6 +2940,8 @@ build_vec_init (tree base, tree maxindex, tree init,
checking. Evaluate the initializer before entering the try block. */
if (from_array && init && TREE_CODE (init) != CONSTRUCTOR)
{
if (lvalue_kind (init) & clk_rvalueref)
xvalue = true;
base2 = decay_conversion (init);
itype = TREE_TYPE (base2);
base2 = get_temp_regvar (itype, base2);
......@@ -3033,7 +3036,11 @@ build_vec_init (tree base, tree maxindex, tree init,
tree from;
if (base2)
from = build1 (INDIRECT_REF, itype, base2);
{
from = build1 (INDIRECT_REF, itype, base2);
if (xvalue)
from = move (from);
}
else
from = NULL_TREE;
......
2010-10-22 Jason Merrill <jason@redhat.com>
PR c++/46103
* g++.dg/cpp0x/implicit10.C: New.
2010-10-22 Uros Bizjak <ubizjak@gmail.com>
PR target/46098
......
// PR c++/46103
// { dg-options -std=c++0x }
struct MoveOnly {
MoveOnly(const MoveOnly&) = delete;
MoveOnly(MoveOnly&&) { }
MoveOnly() = default;
};
struct A {
MoveOnly mo[1];
A() = default;
A(A&&) = default;
};
int main() {
A a;
A aa = static_cast<A&&>(a);
}
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