Author: ericwf Date: Mon May 29 01:42:01 2017 New Revision: 304131 URL: http://llvm.org/viewvc/llvm-project?rev=304131&view=rev Log: Fix coroutine test failures caused by API misusages.
More tests to come. I think that from_address overload should be deleted or ill-formed, except for the 'void*' one; The user cannot possibly have a typed pointer to the coroutine state. Modified: libcxx/trunk/include/experimental/coroutine libcxx/trunk/test/std/experimental/language.support/support.coroutines/coroutine.handle/coroutine.handle.capacity/operator_bool.sh.cpp libcxx/trunk/test/std/experimental/language.support/support.coroutines/coroutine.handle/coroutine.handle.export/address.sh.cpp libcxx/trunk/test/std/experimental/language.support/support.coroutines/coroutine.handle/coroutine.handle.export/from_address.sh.cpp Modified: libcxx/trunk/include/experimental/coroutine URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/experimental/coroutine?rev=304131&r1=304130&r2=304131&view=diff ============================================================================== --- libcxx/trunk/include/experimental/coroutine (original) +++ libcxx/trunk/include/experimental/coroutine Mon May 29 01:42:01 2017 @@ -212,6 +212,15 @@ public: return __tmp; } + // NOTE: this overload isn't required by the standard but is needed so + // the deleted _Promise* overload doesn't make from_address(nullptr) + // ambiguous. + // FIXME: should from_address work with nullptr? + _LIBCPP_ALWAYS_INLINE + static coroutine_handle from_address(nullptr_t) _NOEXCEPT { + return {}; + } + // from_address cannot be used with the coroutines promise type. static coroutine_handle from_address(_Promise*) = delete; Modified: libcxx/trunk/test/std/experimental/language.support/support.coroutines/coroutine.handle/coroutine.handle.capacity/operator_bool.sh.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/experimental/language.support/support.coroutines/coroutine.handle/coroutine.handle.capacity/operator_bool.sh.cpp?rev=304131&r1=304130&r2=304131&view=diff ============================================================================== --- libcxx/trunk/test/std/experimental/language.support/support.coroutines/coroutine.handle/coroutine.handle.capacity/operator_bool.sh.cpp (original) +++ libcxx/trunk/test/std/experimental/language.support/support.coroutines/coroutine.handle/coroutine.handle.capacity/operator_bool.sh.cpp Mon May 29 01:42:01 2017 @@ -48,8 +48,8 @@ void do_test() { assert(bool(c) == false); } { // non-null case - int dummy = 42; - C c = C::from_address(&dummy); + char dummy = 42; + C c = C::from_address((void*)&dummy); assert(c.address() == &dummy); assert(bool(c) == true); } Modified: libcxx/trunk/test/std/experimental/language.support/support.coroutines/coroutine.handle/coroutine.handle.export/address.sh.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/experimental/language.support/support.coroutines/coroutine.handle/coroutine.handle.export/address.sh.cpp?rev=304131&r1=304130&r2=304131&view=diff ============================================================================== --- libcxx/trunk/test/std/experimental/language.support/support.coroutines/coroutine.handle/coroutine.handle.export/address.sh.cpp (original) +++ libcxx/trunk/test/std/experimental/language.support/support.coroutines/coroutine.handle/coroutine.handle.export/address.sh.cpp Mon May 29 01:42:01 2017 @@ -42,8 +42,8 @@ void do_test() { assert(c.address() == nullptr); } { - int dummy = 42; - C c = C::from_address(&dummy); + char dummy = 42; + C c = C::from_address((void*)&dummy); assert(c.address() == &dummy); } } Modified: libcxx/trunk/test/std/experimental/language.support/support.coroutines/coroutine.handle/coroutine.handle.export/from_address.sh.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/experimental/language.support/support.coroutines/coroutine.handle/coroutine.handle.export/from_address.sh.cpp?rev=304131&r1=304130&r2=304131&view=diff ============================================================================== --- libcxx/trunk/test/std/experimental/language.support/support.coroutines/coroutine.handle/coroutine.handle.export/from_address.sh.cpp (original) +++ libcxx/trunk/test/std/experimental/language.support/support.coroutines/coroutine.handle/coroutine.handle.export/from_address.sh.cpp Mon May 29 01:42:01 2017 @@ -37,8 +37,8 @@ void do_test() { assert(c.address() == nullptr); } { - int dummy = 42; - C c = C::from_address(&dummy); + char dummy = 42; + C c = C::from_address((void*)&dummy); assert(c.address() == &dummy); } } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits