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>
 

Reply via email to