c++: Fix ICE with #embed/RAW_DATA_CST after list conversion [PR118671]
[gcc.git] / libstdc++-v3 / testsuite / 25_algorithms / copy_n / 114817.cc
blob09e181f3fd0c1cc4efb29881a974758508f3b715
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
6 #include <algorithm>
7 #include <testsuite_hooks.h>
9 int assignments = 0;
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>
17 NonTrivialAssignment&
18 operator=(const NonTrivialAssignment& o)
20 ++assignments;
21 val = o.val;
22 return *this;
25 int val;
28 static_assert(std::is_trivially_copyable<NonTrivialAssignment>::value);
30 int main()
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 );