aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely.gcc@gmail.com>2010-10-08 01:06:27 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2010-10-08 02:06:27 +0100
commitd3ec3e15d30ac294e3cfbcedda6b639c98cd90fc (patch)
tree6304a4d424ee75b046af4801b1577d04e968d415
parent43ea30dc94eb08b3b4ea8a4bbbd538a93c198d5c (diff)
downloadgcc-d3ec3e15d30ac294e3cfbcedda6b639c98cd90fc.zip
gcc-d3ec3e15d30ac294e3cfbcedda6b639c98cd90fc.tar.gz
gcc-d3ec3e15d30ac294e3cfbcedda6b639c98cd90fc.tar.bz2
future: Enable allocator support.
* include/std/future: Enable allocator support. * testsuite/30_threads/packaged_task/cons/alloc.cc: Expect PASS. * testsuite/30_threads/promise/cons/alloc.cc: Expect PASS. From-SVN: r165147
-rw-r--r--libstdc++-v3/ChangeLog6
-rw-r--r--libstdc++-v3/include/std/future21
-rw-r--r--libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc.cc4
-rw-r--r--libstdc++-v3/testsuite/30_threads/promise/cons/alloc.cc4
4 files changed, 10 insertions, 25 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 1b8e8aa..ef37ef5 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,11 @@
2010-10-08 Jonathan Wakely <jwakely.gcc@gmail.com>
+ * include/std/future: Enable allocator support.
+ * testsuite/30_threads/packaged_task/cons/alloc.cc: Expect PASS.
+ * testsuite/30_threads/promise/cons/alloc.cc: Expect PASS.
+
+2010-10-08 Jonathan Wakely <jwakely.gcc@gmail.com>
+
PR libstdc++/45893
* include/std/functional (bind): Implement DR 817 and add support
for volatile-qualified call wrappers.
diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future
index 803c912..0678093 100644
--- a/libstdc++-v3/include/std/future
+++ b/libstdc++-v3/include/std/future
@@ -213,8 +213,6 @@ namespace std
typedef unique_ptr<_Res, _Result_base::_Deleter> type;
};
- // TODO: use when allocator_arg_t available
- /*
/// Result_alloc.
template<typename _Res, typename _Alloc>
struct _Result_alloc : _Result<_Res>
@@ -255,7 +253,6 @@ namespace std
}
return typename _Ptr<__result_type>::type(__p);
}
- */
/// Shared state between a promise and one or more associated futures.
@@ -843,14 +840,11 @@ namespace std
_M_storage(std::move(__rhs._M_storage))
{ }
- // TODO: needs allocator_arg_t
- /*
template<typename _Allocator>
promise(allocator_arg_t, const _Allocator& __a)
: _M_future(std::allocate_shared<_State>(__a)),
_M_storage(__future_base::_S_allocate_result<_Res>(__a))
{ }
- */
promise(const promise&) = delete;
@@ -933,14 +927,11 @@ namespace std
_M_storage(std::move(__rhs._M_storage))
{ }
- // TODO: needs allocator_arg_t
- /*
template<typename _Allocator>
promise(allocator_arg_t, const _Allocator& __a)
: _M_future(std::allocate_shared<_State>(__a)),
_M_storage(__future_base::_S_allocate_result<_Res&>(__a))
{ }
- */
promise(const promise&) = delete;
@@ -1012,14 +1003,11 @@ namespace std
{ }
- // TODO: needs allocator_arg_t
- /*
template<typename _Allocator>
promise(allocator_arg_t, const _Allocator& __a)
: _M_future(std::allocate_shared<_State>(__a)),
_M_storage(__future_base::_S_allocate_result<void>(__a))
{ }
- */
promise(const promise&) = delete;
@@ -1088,11 +1076,8 @@ namespace std
_M_future->_M_set_result(std::move(__setter));
}
- // TODO: needs allocators
- /*
template<typename _Res, class Alloc>
struct uses_allocator<promise<_Res>, Alloc> : true_type { };
- */
template<typename _StateT, typename _Res>
@@ -1142,14 +1127,11 @@ namespace std
: _M_result(new _Result<_Res>()), _M_task(std::move(__task))
{ }
- // TODO: needs allocator_arg_t
- /*
template<typename _Func, typename _Alloc>
_Task_state(_Func&& __task, const _Alloc& __a)
: _M_result(_S_allocate_result<_Res>(__a))
, _M_task(allocator_arg, __a, std::move(__task))
{ }
- */
void
_M_run(_Args... __args)
@@ -1208,14 +1190,11 @@ namespace std
: _M_state(std::make_shared<_State_type>(__fn))
{ }
- // TODO: needs allocator_arg_t
- /*
template<typename _Fn, typename _Allocator>
explicit
packaged_task(allocator_arg_t __tag, const _Allocator& __a, _Fn __fn)
: _M_state(std::allocate_shared<_State_type>(__a, std::move(__fn)))
{ }
- */
~packaged_task()
{
diff --git a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc.cc b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc.cc
index 2565b61..99253cd 100644
--- a/libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc.cc
+++ b/libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc.cc
@@ -1,4 +1,4 @@
-// { dg-do compile { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
@@ -39,7 +39,7 @@ void test01()
uneq_allocator<char> alloc(99);
- packaged_task<int ()> p1(allocator_arg, alloc, f); // { dg-excess-errors "" }
+ packaged_task<int ()> p1(allocator_arg, alloc, f);
VERIFY( static_cast<bool>(p1) );
p1();
VERIFY( p1.get_future().get() == 5 );
diff --git a/libstdc++-v3/testsuite/30_threads/promise/cons/alloc.cc b/libstdc++-v3/testsuite/30_threads/promise/cons/alloc.cc
index 6d53f44..0ac560d 100644
--- a/libstdc++-v3/testsuite/30_threads/promise/cons/alloc.cc
+++ b/libstdc++-v3/testsuite/30_threads/promise/cons/alloc.cc
@@ -1,4 +1,4 @@
-// { dg-do compile { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
+// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-solaris* *-*-cygwin *-*-darwin* alpha*-*-osf* mips-sgi-irix6* } }
// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
@@ -35,7 +35,7 @@ void test01()
uneq_allocator<char> alloc(99);
- promise<int> p1(allocator_arg, alloc); // { dg-excess-errors "" }
+ promise<int> p1(allocator_arg, alloc);
p1.set_value(5);
VERIFY( p1.get_future().get() == 5 );
}