diff options
author | Jonathan Wakely <jwakely.gcc@gmail.com> | 2011-11-09 21:14:03 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2011-11-09 21:14:03 +0000 |
commit | 5ed56cbbee96b41fa9ef743c48245096d84205b7 (patch) | |
tree | 8c75f00fd0fc61e236df531630752c1eab7a8d8f | |
parent | e14304eff546e4ef3dc33e6439d793f999e81c91 (diff) | |
download | gcc-5ed56cbbee96b41fa9ef743c48245096d84205b7.zip gcc-5ed56cbbee96b41fa9ef743c48245096d84205b7.tar.gz gcc-5ed56cbbee96b41fa9ef743c48245096d84205b7.tar.bz2 |
allocator.h (__shrink_to_fit_aux::_S_do_it): Create the new object with the same allocator.
* include/bits/allocator.h (__shrink_to_fit_aux::_S_do_it): Create
the new object with the same allocator.
* testsuite/23_containers/vector/capacity/shrink_to_fit2.cc: New.
From-SVN: r181235
-rw-r--r-- | libstdc++-v3/ChangeLog | 6 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/allocator.h | 3 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc | 61 |
3 files changed, 69 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index f18d7ee..c25dd28 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,11 @@ 2011-11-09 Jonathan Wakely <jwakely.gcc@gmail.com> + * include/bits/allocator.h (__shrink_to_fit_aux::_S_do_it): Create + the new object with the same allocator. + * testsuite/23_containers/vector/capacity/shrink_to_fit2.cc: New. + +2011-11-09 Jonathan Wakely <jwakely.gcc@gmail.com> + * include/profile/unordered_map: Add missing copy constructors. * include/profile/unordered_set: Likewise. diff --git a/libstdc++-v3/include/bits/allocator.h b/libstdc++-v3/include/bits/allocator.h index 76329b3..b985d3f 100644 --- a/libstdc++-v3/include/bits/allocator.h +++ b/libstdc++-v3/include/bits/allocator.h @@ -198,7 +198,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __try { _Tp(__make_move_if_noexcept_iterator(__c.begin()), - __make_move_if_noexcept_iterator(__c.end())).swap(__c); + __make_move_if_noexcept_iterator(__c.end()), + __c.get_allocator()).swap(__c); return true; } __catch(...) diff --git a/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc b/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc new file mode 100644 index 0000000..81cd55a8 --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc @@ -0,0 +1,61 @@ +// { dg-options "-std=gnu++0x" } + +// Copyright (C) 2011 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without Pred the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// <http://www.gnu.org/licenses/>. + +#include <vector> +#include <testsuite_hooks.h> +#include <testsuite_allocator.h> + +using __gnu_test::propagating_allocator; + +void test01() +{ + bool test __attribute__((unused)) = true; + + typedef propagating_allocator<int, true> alloc_type; + alloc_type alloc(5); + + std::vector<int, alloc_type> v(10u, 1, alloc); + v.reserve(100); + VERIFY( v.size() < v.capacity() ); + v.shrink_to_fit(); + VERIFY( v.size() == v.capacity() ); + VERIFY( v.get_allocator().get_personality() == alloc.get_personality() ); +} + +void test02() +{ + bool test __attribute__((unused)) = true; + + typedef propagating_allocator<int, false> alloc_type; + alloc_type alloc(5); + + std::vector<int, alloc_type> v(10u, 1, alloc); + v.reserve(100); + VERIFY( v.size() < v.capacity() ); + v.shrink_to_fit(); + VERIFY( v.size() == v.capacity() ); + VERIFY( v.get_allocator().get_personality() == alloc.get_personality() ); +} + +int main() +{ + test01(); + test02(); + return 0; +} |