On 6 November 2012 19:41, Jonathan Wakely wrote: > On 6 November 2012 18:21, Paolo Carlini wrote: >> >> testsuite/20_util/scoped_allocator/1.cc:79: void test02(): Assertion >> `evv[0].get_allocator().get_personality() == 2' failed. >> >> I didn't really investigate it... > > Oops, looks like I missed something, will fix it asap ...
Fixed with this patch, which also adds an allocator parameter to the vector(size_type) constructor, which is missing from the standard but I hope to get fixed via http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#2210 Tested x86_64-linux, in normal, debug and profile mode, committed to trunk. I still see some other profile-mode failures, not sure if they're old or I caused them recently, will investigate further.
commit f1d4bcfe4fb152e0db4bdd7093ad8885e6d88a80 Author: Jonathan Wakely <jwakely....@gmail.com> Date: Wed Nov 7 01:03:35 2012 +0000 * include/bits/stl_vector.h (vector(size_type)): Add missing allocator parameter. * include/bits/stl_bvector.h: Likewise. * include/debug/vector (vector(size_type)): Likewise. * include/profile/vector (vector(size_type)): Likewise. Pass allocator to base constructor. * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: Adjust dg-error line numbers. * testsuite/23_containers/vector/requirements/dr438/ constructor_1_neg.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/ constructor_2_neg.cc: Likewise. * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: Likewise. diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h index 3adbfa1..b8d3efb 100644 --- a/libstdc++-v3/include/bits/stl_bvector.h +++ b/libstdc++-v3/include/bits/stl_bvector.h @@ -555,6 +555,21 @@ template<typename _Alloc> vector(const allocator_type& __a) : _Base(__a) { } +#ifdef __GXX_EXPERIMENTAL_CXX0X__ + explicit + vector(size_type __n, const allocator_type& __a = allocator_type()) + : vector(__n, false, __a) + { } + + vector(size_type __n, const bool& __value, + const allocator_type& __a = allocator_type()) + : _Base(__a) + { + _M_initialize(__n); + std::fill(this->_M_impl._M_start._M_p, this->_M_impl._M_end_of_storage, + __value ? ~0 : 0); + } +#else explicit vector(size_type __n, const bool& __value = bool(), const allocator_type& __a = allocator_type()) @@ -564,6 +579,7 @@ template<typename _Alloc> std::fill(this->_M_impl._M_start._M_p, this->_M_impl._M_end_of_storage, __value ? ~0 : 0); } +#endif vector(const vector& __x) : _Base(__x._M_get_Bit_allocator()) diff --git a/libstdc++-v3/include/bits/stl_vector.h b/libstdc++-v3/include/bits/stl_vector.h index 6e229aa..1f14f7e 100644 --- a/libstdc++-v3/include/bits/stl_vector.h +++ b/libstdc++-v3/include/bits/stl_vector.h @@ -261,13 +261,14 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER /** * @brief Creates a %vector with default constructed elements. * @param __n The number of elements to initially create. + * @param __a An allocator. * * This constructor fills the %vector with @a __n default * constructed elements. */ explicit - vector(size_type __n) - : _Base(__n) + vector(size_type __n, const allocator_type& __a = allocator_type()) + : _Base(__n, __a) { _M_default_initialize(__n); } /** diff --git a/libstdc++-v3/include/debug/vector b/libstdc++-v3/include/debug/vector index 9c33fdf..fe65bab 100644 --- a/libstdc++-v3/include/debug/vector +++ b/libstdc++-v3/include/debug/vector @@ -83,8 +83,8 @@ namespace __debug #ifdef __GXX_EXPERIMENTAL_CXX0X__ explicit - vector(size_type __n) - : _Base(__n), _M_guaranteed_capacity(__n) { } + vector(size_type __n, const _Allocator& __a = _Allocator()) + : _Base(__n, __a), _M_guaranteed_capacity(__n) { } vector(size_type __n, const _Tp& __value, const _Allocator& __a = _Allocator()) diff --git a/libstdc++-v3/include/profile/vector b/libstdc++-v3/include/profile/vector index fcd6962..ec931a3 100644 --- a/libstdc++-v3/include/profile/vector +++ b/libstdc++-v3/include/profile/vector @@ -84,8 +84,8 @@ namespace __profile #ifdef __GXX_EXPERIMENTAL_CXX0X__ explicit - vector(size_type __n) - : _Base(__n) + vector(size_type __n, const _Allocator& __a = _Allocator()) + : _Base(__n, __a) { __profcxx_vector_construct(this, this->capacity()); __profcxx_vector_construct2(this); @@ -147,7 +147,7 @@ namespace __profile } vector(const _Base& __x, const _Allocator& __a) - : _Base(__x) + : _Base(__x, __a) { __profcxx_vector_construct(this, this->capacity()); __profcxx_vector_construct2(this); diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc index 320f4dd..8c00989 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1236 } +// { dg-error "no matching" "" { target *-*-* } 1237 } #include <vector> diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc index 78a6ead..e5a4644 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1166 } +// { dg-error "no matching" "" { target *-*-* } 1167 } #include <vector> diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc index af12c6d..9e2924c 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1166 } +// { dg-error "no matching" "" { target *-*-* } 1167 } #include <vector> #include <utility> diff --git a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc index da88180..e4bec26 100644 --- a/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc +++ b/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc @@ -18,7 +18,7 @@ // <http://www.gnu.org/licenses/>. // { dg-do compile } -// { dg-error "no matching" "" { target *-*-* } 1277 } +// { dg-error "no matching" "" { target *-*-* } 1278 } #include <vector>