1 // { dg-do run { target c++11 } }
3 // Bug libstdc++/114817 - Wrong codegen for std::copy of
4 // "trivially copyable but not trivially assignable" type
7 #include <testsuite_hooks.h>
11 struct NonTrivialAssignment
13 NonTrivialAssignment(int v
) : val(v
) { }
14 NonTrivialAssignment(const NonTrivialAssignment
&) = default;
15 void operator=(const volatile NonTrivialAssignment
&) = delete;
16 template<class = void>
18 operator=(const NonTrivialAssignment
& o
)
28 static_assert(std::is_trivially_copyable
<NonTrivialAssignment
>::value
);
32 NonTrivialAssignment src
[2]{1, 2};
33 NonTrivialAssignment dst
[2]{3, 4};
34 std::copy_n(src
, 2, dst
);
35 VERIFY( assignments
== 2 );
36 VERIFY( dst
[0].val
== src
[0].val
);
37 VERIFY( dst
[1].val
== src
[1].val
);