OSDN Git Service

Fix PR52822 (stable_partition move-assigns object to itself) by
authorjyasskin <jyasskin@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 12 Apr 2012 21:41:55 +0000 (21:41 +0000)
committerjyasskin <jyasskin@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 12 Apr 2012 21:41:55 +0000 (21:41 +0000)
commit4bd878b00adac4dcfe912ddbc77bac9dc6db5849
treeee58b847ea53bc8f42cdd05e7a79d58e241651b0
parentdb230e140fa86acd8d6d8cee21607442cfa5abea
Fix PR52822 (stable_partition move-assigns object to itself) by
scanning for the first value that doesn't match the predicate before
starting to rearrange values.

2012-04-03   Jeffrey Yasskin  <jyasskin@google.com>

PR libstdc++/52822
* include/bits/stl_algo.h (__find_if_not): Expose in
C++98 mode.
(__find_if_not_n): Like __find_if_not, but works on and updates a
counted range instead of a bounded range.
(stable_partition): Guarantee !__pred(*__first) in call to
__stable_partition_adaptive() or __inplace_stable_partition().
(__stable_partition_adaptive): Use new precondition to avoid
moving/copying objects onto themselves.  Guarantee new
precondition to recursive calls.
(__inplace_stable_partition): Use new precondition to simplify
base case, remove __last parameter.  Guarantee new precondition to
recursive calls.
* testsuite/25_algorithms/stable_partition/moveable.cc (test02):
Test a sequence that starts with a value matching the predicate.
* testsuite/25_algorithms/stable_partition/pr52822.cc:
Test vectors, which have a destructive self-move-assignment.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@186394 138bc75d-0d04-0410-961f-82ee72b054a4
libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/stl_algo.h
libstdc++-v3/testsuite/25_algorithms/stable_partition/moveable.cc
libstdc++-v3/testsuite/25_algorithms/stable_partition/pr52822.cc [new file with mode: 0644]