[v3] Fix profile mode failures
Jonathan Wakely
jwakely.gcc@gmail.com
Wed Nov 7 09:19:00 GMT 2012
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.
-------------- next part --------------
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.
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>
More information about the Libstdc++
mailing list