[coroutines] Sema: Allow co_return all by itself.
Reviewers: rsmith, EricWF Subscribers: mehdi_amini, llvm-commits, EricWF Differential Revision: https://reviews.llvm.org/D26038 llvm-svn: 291513
This commit is contained in:
parent
43a833bec4
commit
d97f6bfbb1
|
@ -8720,10 +8720,6 @@ def err_coroutine_invalid_func_context : Error<
|
|||
"|a copy assignment operator|a move assignment operator|the 'main' function"
|
||||
"|a constexpr function|a function with a deduced return type"
|
||||
"|a varargs function}0">;
|
||||
def ext_coroutine_without_co_await_co_yield : ExtWarn<
|
||||
"'co_return' used in a function "
|
||||
"that uses neither 'co_await' nor 'co_yield'">,
|
||||
InGroup<DiagGroup<"coreturn-without-coawait">>;
|
||||
def err_implied_std_coroutine_traits_not_found : Error<
|
||||
"you need to include <experimental/coroutine> before defining a coroutine">;
|
||||
def err_malformed_std_coroutine_traits : Error<
|
||||
|
|
|
@ -578,17 +578,6 @@ void Sema::CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body) {
|
|||
isa<CoyieldExpr>(First) ? 1 : 2);
|
||||
}
|
||||
|
||||
bool AnyCoawaits = false;
|
||||
bool AnyCoyields = false;
|
||||
for (auto *CoroutineStmt : Fn->CoroutineStmts) {
|
||||
AnyCoawaits |= isa<CoawaitExpr>(CoroutineStmt);
|
||||
AnyCoyields |= isa<CoyieldExpr>(CoroutineStmt);
|
||||
}
|
||||
|
||||
if (!AnyCoawaits && !AnyCoyields)
|
||||
Diag(Fn->CoroutineStmts.front()->getLocStart(),
|
||||
diag::ext_coroutine_without_co_await_co_yield);
|
||||
|
||||
SourceLocation Loc = FD->getLocation();
|
||||
|
||||
// Form a declaration statement for the promise declaration, so that AST
|
||||
|
|
|
@ -154,12 +154,11 @@ void mixed_await() {
|
|||
}
|
||||
|
||||
void only_coreturn(void_tag) {
|
||||
co_return; // expected-warning {{'co_return' used in a function that uses neither 'co_await' nor 'co_yield'}}
|
||||
co_return; // OK
|
||||
}
|
||||
|
||||
void mixed_coreturn(void_tag, bool b) {
|
||||
if (b)
|
||||
// expected-warning@+1 {{'co_return' used in a function that uses neither}}
|
||||
co_return; // expected-note {{use of 'co_return'}}
|
||||
else
|
||||
return; // expected-error {{not allowed in coroutine}}
|
||||
|
|
Loading…
Reference in New Issue