Patchwork [v3] Fix profile mode failures

login
register
mail settings
Submitter Jonathan Wakely
Date Nov. 7, 2012, 9:18 a.m.
Message ID <CAH6eHdSXg5Ki=z6gUk_6v1fP1_eO96ihAtMV0JvByHJSGQh81g@mail.gmail.com>
Download mbox | patch
Permalink /patch/197637/
State New
Headers show

Comments

Jonathan Wakely - Nov. 7, 2012, 9:18 a.m.
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.gcc@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.
Paolo Carlini - Nov. 7, 2012, 10:25 a.m.
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.
Jonathan Wakely - Nov. 7, 2012, 10:55 a.m.
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 ;-)

Patch

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>