aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2020-02-25 12:21:44 +0000
committerJonathan Wakely <jwakely@redhat.com>2020-02-25 12:21:44 +0000
commit5b904f175ff26269615f148459a8604f45880591 (patch)
treed5bb4382caa9c91036e35441c9974f970521d9bb /gcc
parent2877ad9ac28e1c7f0a6e643ca8f03f795e0f4985 (diff)
downloadgcc-5b904f175ff26269615f148459a8604f45880591.zip
gcc-5b904f175ff26269615f148459a8604f45880591.tar.gz
gcc-5b904f175ff26269615f148459a8604f45880591.tar.bz2
libstdc++: Fix regression in std::move algorithm (PR 93872)
The std::move and std::move_backward algorithms dispatch to the std::__memmove helper when appropriate. That function uses a pointer-to-const for the source values, preventing them from being moved. The two callers of that function have the same problem. Rather than altering __memmove and its callers to work with const or non-const source pointers, this takes a more conservative approach of casting away the const at the point where we want to do a move assignment. This relies on the fact that we only use __memmove when the type is trivially copyable, so we know the move assignment doesn't alter the source anyway. PR libstdc++/93872 * include/bits/stl_algobase.h (__memmove): Cast away const before doing move assignment. * testsuite/25_algorithms/move/93872.cc: New test. * testsuite/25_algorithms/move_backward/93872.cc: New test.
Diffstat (limited to 'gcc')
0 files changed, 0 insertions, 0 deletions