mirror of git://gcc.gnu.org/git/gcc.git
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
This commit is contained in:
parent
43ea30dc94
commit
d3ec3e15d3
|
@ -1,3 +1,9 @@
|
||||||
|
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>
|
2010-10-08 Jonathan Wakely <jwakely.gcc@gmail.com>
|
||||||
|
|
||||||
PR libstdc++/45893
|
PR libstdc++/45893
|
||||||
|
|
|
@ -213,8 +213,6 @@ namespace std
|
||||||
typedef unique_ptr<_Res, _Result_base::_Deleter> type;
|
typedef unique_ptr<_Res, _Result_base::_Deleter> type;
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO: use when allocator_arg_t available
|
|
||||||
/*
|
|
||||||
/// Result_alloc.
|
/// Result_alloc.
|
||||||
template<typename _Res, typename _Alloc>
|
template<typename _Res, typename _Alloc>
|
||||||
struct _Result_alloc : _Result<_Res>
|
struct _Result_alloc : _Result<_Res>
|
||||||
|
@ -255,7 +253,6 @@ namespace std
|
||||||
}
|
}
|
||||||
return typename _Ptr<__result_type>::type(__p);
|
return typename _Ptr<__result_type>::type(__p);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/// Shared state between a promise and one or more associated futures.
|
/// Shared state between a promise and one or more associated futures.
|
||||||
|
@ -843,14 +840,11 @@ namespace std
|
||||||
_M_storage(std::move(__rhs._M_storage))
|
_M_storage(std::move(__rhs._M_storage))
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
// TODO: needs allocator_arg_t
|
|
||||||
/*
|
|
||||||
template<typename _Allocator>
|
template<typename _Allocator>
|
||||||
promise(allocator_arg_t, const _Allocator& __a)
|
promise(allocator_arg_t, const _Allocator& __a)
|
||||||
: _M_future(std::allocate_shared<_State>(__a)),
|
: _M_future(std::allocate_shared<_State>(__a)),
|
||||||
_M_storage(__future_base::_S_allocate_result<_Res>(__a))
|
_M_storage(__future_base::_S_allocate_result<_Res>(__a))
|
||||||
{ }
|
{ }
|
||||||
*/
|
|
||||||
|
|
||||||
promise(const promise&) = delete;
|
promise(const promise&) = delete;
|
||||||
|
|
||||||
|
@ -933,14 +927,11 @@ namespace std
|
||||||
_M_storage(std::move(__rhs._M_storage))
|
_M_storage(std::move(__rhs._M_storage))
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
// TODO: needs allocator_arg_t
|
|
||||||
/*
|
|
||||||
template<typename _Allocator>
|
template<typename _Allocator>
|
||||||
promise(allocator_arg_t, const _Allocator& __a)
|
promise(allocator_arg_t, const _Allocator& __a)
|
||||||
: _M_future(std::allocate_shared<_State>(__a)),
|
: _M_future(std::allocate_shared<_State>(__a)),
|
||||||
_M_storage(__future_base::_S_allocate_result<_Res&>(__a))
|
_M_storage(__future_base::_S_allocate_result<_Res&>(__a))
|
||||||
{ }
|
{ }
|
||||||
*/
|
|
||||||
|
|
||||||
promise(const promise&) = delete;
|
promise(const promise&) = delete;
|
||||||
|
|
||||||
|
@ -1012,14 +1003,11 @@ namespace std
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
|
||||||
// TODO: needs allocator_arg_t
|
|
||||||
/*
|
|
||||||
template<typename _Allocator>
|
template<typename _Allocator>
|
||||||
promise(allocator_arg_t, const _Allocator& __a)
|
promise(allocator_arg_t, const _Allocator& __a)
|
||||||
: _M_future(std::allocate_shared<_State>(__a)),
|
: _M_future(std::allocate_shared<_State>(__a)),
|
||||||
_M_storage(__future_base::_S_allocate_result<void>(__a))
|
_M_storage(__future_base::_S_allocate_result<void>(__a))
|
||||||
{ }
|
{ }
|
||||||
*/
|
|
||||||
|
|
||||||
promise(const promise&) = delete;
|
promise(const promise&) = delete;
|
||||||
|
|
||||||
|
@ -1088,11 +1076,8 @@ namespace std
|
||||||
_M_future->_M_set_result(std::move(__setter));
|
_M_future->_M_set_result(std::move(__setter));
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: needs allocators
|
|
||||||
/*
|
|
||||||
template<typename _Res, class Alloc>
|
template<typename _Res, class Alloc>
|
||||||
struct uses_allocator<promise<_Res>, Alloc> : true_type { };
|
struct uses_allocator<promise<_Res>, Alloc> : true_type { };
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
template<typename _StateT, typename _Res>
|
template<typename _StateT, typename _Res>
|
||||||
|
@ -1142,14 +1127,11 @@ namespace std
|
||||||
: _M_result(new _Result<_Res>()), _M_task(std::move(__task))
|
: _M_result(new _Result<_Res>()), _M_task(std::move(__task))
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
// TODO: needs allocator_arg_t
|
|
||||||
/*
|
|
||||||
template<typename _Func, typename _Alloc>
|
template<typename _Func, typename _Alloc>
|
||||||
_Task_state(_Func&& __task, const _Alloc& __a)
|
_Task_state(_Func&& __task, const _Alloc& __a)
|
||||||
: _M_result(_S_allocate_result<_Res>(__a))
|
: _M_result(_S_allocate_result<_Res>(__a))
|
||||||
, _M_task(allocator_arg, __a, std::move(__task))
|
, _M_task(allocator_arg, __a, std::move(__task))
|
||||||
{ }
|
{ }
|
||||||
*/
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_M_run(_Args... __args)
|
_M_run(_Args... __args)
|
||||||
|
@ -1208,14 +1190,11 @@ namespace std
|
||||||
: _M_state(std::make_shared<_State_type>(__fn))
|
: _M_state(std::make_shared<_State_type>(__fn))
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
// TODO: needs allocator_arg_t
|
|
||||||
/*
|
|
||||||
template<typename _Fn, typename _Allocator>
|
template<typename _Fn, typename _Allocator>
|
||||||
explicit
|
explicit
|
||||||
packaged_task(allocator_arg_t __tag, const _Allocator& __a, _Fn __fn)
|
packaged_task(allocator_arg_t __tag, const _Allocator& __a, _Fn __fn)
|
||||||
: _M_state(std::allocate_shared<_State_type>(__a, std::move(__fn)))
|
: _M_state(std::allocate_shared<_State_type>(__a, std::move(__fn)))
|
||||||
{ }
|
{ }
|
||||||
*/
|
|
||||||
|
|
||||||
~packaged_task()
|
~packaged_task()
|
||||||
{
|
{
|
||||||
|
|
|
@ -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 -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
|
||||||
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
|
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
|
||||||
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
|
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
|
||||||
|
@ -39,7 +39,7 @@ void test01()
|
||||||
|
|
||||||
uneq_allocator<char> alloc(99);
|
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) );
|
VERIFY( static_cast<bool>(p1) );
|
||||||
p1();
|
p1();
|
||||||
VERIFY( p1.get_future().get() == 5 );
|
VERIFY( p1.get_future().get() == 5 );
|
||||||
|
|
|
@ -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 -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* alpha*-*-osf* mips-sgi-irix6* } }
|
||||||
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
|
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
|
||||||
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
|
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
|
||||||
|
@ -35,7 +35,7 @@ void test01()
|
||||||
|
|
||||||
uneq_allocator<char> alloc(99);
|
uneq_allocator<char> alloc(99);
|
||||||
|
|
||||||
promise<int> p1(allocator_arg, alloc); // { dg-excess-errors "" }
|
promise<int> p1(allocator_arg, alloc);
|
||||||
p1.set_value(5);
|
p1.set_value(5);
|
||||||
VERIFY( p1.get_future().get() == 5 );
|
VERIFY( p1.get_future().get() == 5 );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue