From 207d13cf84fef9b11c6a7906e4cdb6eb7d204327 Mon Sep 17 00:00:00 2001 From: Eric Fiselier Date: Mon, 29 May 2017 05:00:24 +0000 Subject: [PATCH] Fix multiple bugs in coroutine tests. llvm-svn: 304124 --- libcxx/include/experimental/coroutine | 3 +++ .../language.support/support.coroutines/dialect_support.sh.cpp | 10 ++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/libcxx/include/experimental/coroutine b/libcxx/include/experimental/coroutine index 206fde2..42ee3ed 100644 --- a/libcxx/include/experimental/coroutine +++ b/libcxx/include/experimental/coroutine @@ -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; diff --git a/libcxx/test/libcxx/experimental/language.support/support.coroutines/dialect_support.sh.cpp b/libcxx/test/libcxx/experimental/language.support/support.coroutines/dialect_support.sh.cpp index ebe447c..56f47c8 100644 --- a/libcxx/test/libcxx/experimental/language.support/support.coroutines/dialect_support.sh.cpp +++ b/libcxx/test/libcxx/experimental/language.support/support.coroutines/dialect_support.sh.cpp @@ -27,11 +27,11 @@ coro::suspend_never sn; struct MyFuture { struct promise_type { typedef coro::coroutine_handle 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 p; }; @@ -54,4 +53,7 @@ MyFuture test_coro() { int main() { MyFuture f = test_coro(); + while (!f.p.done()) + f.p.resume(); + f.p.destroy(); } -- 2.7.4