Message ID | CAH6eHdSXg5Ki=z6gUk_6v1fP1_eO96ihAtMV0JvByHJSGQh81g@mail.gmail.com |
---|---|
State | New |
Headers | show |
Hi, On 11/07/2012 10:18 AM, Jonathan Wakely wrote: > 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 Thanks a lot! > I still see some other profile-mode failures, not sure if they're old > or I caused them recently, will investigate further. I'm for example seeing in the log: 23_containers/list/init-list.cc execution test pretty mysterious, I think it's the first time I ever see it. Paolo.
On 7 November 2012 10:25, Paolo Carlini wrote: > Hi, > > > On 11/07/2012 10:18 AM, Jonathan Wakely wrote: >> >> 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 > > Thanks a lot! > >> I still see some other profile-mode failures, not sure if they're old >> or I caused them recently, will investigate further. > > I'm for example seeing in the log: > > 23_containers/list/init-list.cc execution test > > pretty mysterious, Yes, I had a quick look at it but couldn't see the problem, so wanted to fix the trivial vector problem first. > I think it's the first time I ever see it. Huh, then I guess I broke that one too. I won't rest until it's fixed ;-)
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>