From 593a3fb38532b1dbff317aad43640c29f5462598 Mon Sep 17 00:00:00 2001 From: redi Date: Wed, 9 Nov 2011 21:14:03 +0000 Subject: [PATCH] * 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@181235 138bc75d-0d04-0410-961f-82ee72b054a4 --- libstdc++-v3/ChangeLog | 6 +++ libstdc++-v3/include/bits/allocator.h | 3 +- .../vector/capacity/shrink_to_fit2.cc | 61 ++++++++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 libstdc++-v3/testsuite/23_containers/vector/capacity/shrink_to_fit2.cc 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 + * 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 + * 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 +// . + +#include +#include +#include + +using __gnu_test::propagating_allocator; + +void test01() +{ + bool test __attribute__((unused)) = true; + + typedef propagating_allocator alloc_type; + alloc_type alloc(5); + + std::vector 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 alloc_type; + alloc_type alloc(5); + + std::vector 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; +} -- 2.7.4