diff options
author | Jonathan Wakely <jwakely.gcc@gmail.com> | 2010-10-08 01:06:27 +0000 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2010-10-08 02:06:27 +0100 |
commit | d3ec3e15d30ac294e3cfbcedda6b639c98cd90fc (patch) | |
tree | 6304a4d424ee75b046af4801b1577d04e968d415 | |
parent | 43ea30dc94eb08b3b4ea8a4bbbd538a93c198d5c (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | libstdc++-v3/include/std/future | 21 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/30_threads/packaged_task/cons/alloc.cc | 4 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/30_threads/promise/cons/alloc.cc | 4 |
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 ); } |