Fix multiple bugs in coroutine tests.

llvm-svn: 304124
This commit is contained in:
Eric Fiselier 2017-05-29 05:00:24 +00:00
parent eaacd07079
commit 207d13cf84
2 changed files with 9 additions and 4 deletions

View File

@ -212,6 +212,9 @@ public:
return __tmp;
}
// from_address cannot be used with the coroutines promise type.
static coroutine_handle from_address(_Promise*) = delete;
_LIBCPP_ALWAYS_INLINE
static coroutine_handle from_promise(_Promise& __promise) _NOEXCEPT {
coroutine_handle __tmp;

View File

@ -27,11 +27,11 @@ coro::suspend_never sn;
struct MyFuture {
struct promise_type {
typedef coro::coroutine_handle<promise_type> HandleT;
coro::suspend_always initial_suspend() { return sa; }
coro::suspend_never final_suspend() { return sn; }
coro::suspend_never initial_suspend() { return sn; }
coro::suspend_always final_suspend() { return sa; }
coro::suspend_never yield_value(int) { return sn; }
MyFuture get_return_object() {
MyFuture f(HandleT::from_address(this));
MyFuture f(HandleT::from_promise(*this));
return f;
}
void return_void() {}
@ -41,7 +41,6 @@ struct MyFuture {
MyFuture() : p() {}
MyFuture(HandleT h) : p(h) {}
private:
coro::coroutine_handle<promise_type> p;
};
@ -54,4 +53,7 @@ MyFuture test_coro() {
int main()
{
MyFuture f = test_coro();
while (!f.p.done())
f.p.resume();
f.p.destroy();
}