Index: clang/lib/Sema/SemaCoroutine.cpp =================================================================== --- clang/lib/Sema/SemaCoroutine.cpp +++ clang/lib/Sema/SemaCoroutine.cpp @@ -448,8 +448,9 @@ CallExpr *AwaitSuspend = cast(Calls.Results[ACT::ACT_Suspend]); if (!AwaitSuspend->getType()->isDependentType()) { // [expr.await]p3 [...] - // - await-suspend is the expression e.await_suspend(h), which shall be - // a prvalue of type void or bool. + // - await-suspend is the expression e.await_suspend(h), which shall be + // a prvalue of type void, bool, or std::coroutine_handle for some + // type Z. QualType RetType = AwaitSuspend->getCallReturnType(S.Context); // Experimental support for coroutine_handle returning await_suspend.