clang  8.0.0svn
Classes | Functions
SemaCoroutine.cpp File Reference
#include "CoroutineStmtBuilder.h"
#include "clang/AST/ASTLambda.h"
#include "clang/AST/Decl.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/StmtCXX.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Sema/Initialization.h"
#include "clang/Sema/Overload.h"
#include "clang/Sema/ScopeInfo.h"
#include "clang/Sema/SemaInternal.h"
Include dependency graph for SemaCoroutine.cpp:

Go to the source code of this file.

Classes

struct  ReadySuspendResumeResult
 

Functions

static LookupResult lookupMember (Sema &S, const char *Name, CXXRecordDecl *RD, SourceLocation Loc, bool &Res)
 
static bool lookupMember (Sema &S, const char *Name, CXXRecordDecl *RD, SourceLocation Loc)
 
static QualType lookupPromiseType (Sema &S, const FunctionDecl *FD, SourceLocation KwLoc)
 Look up the std::coroutine_traits<...>::promise_type for the given function type. More...
 
static QualType lookupCoroutineHandleType (Sema &S, QualType PromiseType, SourceLocation Loc)
 Look up the std::experimental::coroutine_handle<PromiseType>. More...
 
static bool isValidCoroutineContext (Sema &S, SourceLocation Loc, StringRef Keyword)
 
static ExprResult buildOperatorCoawaitLookupExpr (Sema &SemaRef, Scope *S, SourceLocation Loc)
 
static ExprResult buildOperatorCoawaitCall (Sema &SemaRef, SourceLocation Loc, Expr *E, UnresolvedLookupExpr *Lookup)
 Build a call to 'operator co_await' if there is a suitable operator for the given expression. More...
 
static ExprResult buildOperatorCoawaitCall (Sema &SemaRef, Scope *S, SourceLocation Loc, Expr *E)
 
static ExprbuildBuiltinCall (Sema &S, SourceLocation Loc, Builtin::ID Id, MultiExprArg CallArgs)
 
static ExprResult buildCoroutineHandle (Sema &S, QualType PromiseType, SourceLocation Loc)
 
static ExprResult buildMemberCall (Sema &S, Expr *Base, SourceLocation Loc, StringRef Name, MultiExprArg Args)
 
static ExprmaybeTailCall (Sema &S, QualType RetType, Expr *E, SourceLocation Loc)
 
static ReadySuspendResumeResult buildCoawaitCalls (Sema &S, VarDecl *CoroPromise, SourceLocation Loc, Expr *E)
 Build calls to await_ready, await_suspend, and await_resume for a co_await expression. More...
 
static ExprResult buildPromiseCall (Sema &S, VarDecl *Promise, SourceLocation Loc, StringRef Name, MultiExprArg Args)
 
static FunctionScopeInfocheckCoroutineContext (Sema &S, SourceLocation Loc, StringRef Keyword, bool IsImplicit=false)
 Check that this is a context in which a coroutine suspension can appear. More...
 
static ExprbuildStdNoThrowDeclRef (Sema &S, SourceLocation Loc)
 Look up the std::nothrow object. More...
 
static FunctionDeclfindDeleteForPromise (Sema &S, SourceLocation Loc, QualType PromiseType)
 
static bool diagReturnOnAllocFailure (Sema &S, Expr *E, CXXRecordDecl *PromiseRecordDecl, FunctionScopeInfo &Fn)
 
static void noteMemberDeclaredHere (Sema &S, Expr *E, FunctionScopeInfo &Fn)
 
static ExprcastForMoving (Sema &S, Expr *E, QualType T=QualType())
 
static VarDeclbuildVarDecl (Sema &S, SourceLocation Loc, QualType Type, IdentifierInfo *II)
 Build a variable declaration for move parameter. More...
 

Function Documentation

◆ buildBuiltinCall()

static Expr* buildBuiltinCall ( Sema S,
SourceLocation  Loc,
Builtin::ID  Id,
MultiExprArg  CallArgs 
)
static

Definition at line 316 of file SemaCoroutine.cpp.

Referenced by diagReturnOnAllocFailure().

◆ buildCoawaitCalls()

static ReadySuspendResumeResult buildCoawaitCalls ( Sema S,
VarDecl CoroPromise,
SourceLocation  Loc,
Expr E 
)
static

Build calls to await_ready, await_suspend, and await_resume for a co_await expression.

Definition at line 423 of file SemaCoroutine.cpp.

◆ buildCoroutineHandle()

static ExprResult buildCoroutineHandle ( Sema S,
QualType  PromiseType,
SourceLocation  Loc 
)
static

Definition at line 336 of file SemaCoroutine.cpp.

◆ buildMemberCall()

static ExprResult buildMemberCall ( Sema S,
Expr Base,
SourceLocation  Loc,
StringRef  Name,
MultiExprArg  Args 
)
static

Definition at line 370 of file SemaCoroutine.cpp.

◆ buildOperatorCoawaitCall() [1/2]

static ExprResult buildOperatorCoawaitCall ( Sema SemaRef,
SourceLocation  Loc,
Expr E,
UnresolvedLookupExpr Lookup 
)
static

Build a call to 'operator co_await' if there is a suitable operator for the given expression.

Definition at line 299 of file SemaCoroutine.cpp.

References clang::UnresolvedSetImpl::append(), clang::Sema::CreateOverloadedUnaryOp(), clang::OverloadExpr::decls_begin(), and clang::OverloadExpr::decls_end().

◆ buildOperatorCoawaitCall() [2/2]

static ExprResult buildOperatorCoawaitCall ( Sema SemaRef,
Scope S,
SourceLocation  Loc,
Expr E 
)
static

Definition at line 307 of file SemaCoroutine.cpp.

◆ buildOperatorCoawaitLookupExpr()

static ExprResult buildOperatorCoawaitLookupExpr ( Sema SemaRef,
Scope S,
SourceLocation  Loc 
)
static

Definition at line 276 of file SemaCoroutine.cpp.

◆ buildPromiseCall()

static ExprResult buildPromiseCall ( Sema S,
VarDecl Promise,
SourceLocation  Loc,
StringRef  Name,
MultiExprArg  Args 
)
static

Definition at line 491 of file SemaCoroutine.cpp.

Referenced by clang::Sema::BuildCoreturnStmt(), and diagReturnOnAllocFailure().

◆ buildStdNoThrowDeclRef()

static Expr* buildStdNoThrowDeclRef ( Sema S,
SourceLocation  Loc 
)
static

Look up the std::nothrow object.

Definition at line 878 of file SemaCoroutine.cpp.

Referenced by diagReturnOnAllocFailure().

◆ buildVarDecl()

static VarDecl* buildVarDecl ( Sema S,
SourceLocation  Loc,
QualType  Type,
IdentifierInfo II 
)
static

◆ castForMoving()

static Expr* castForMoving ( Sema S,
Expr E,
QualType  T = QualType() 
)
static

◆ checkCoroutineContext()

static FunctionScopeInfo* checkCoroutineContext ( Sema S,
SourceLocation  Loc,
StringRef  Keyword,
bool  IsImplicit = false 
)
static

◆ diagReturnOnAllocFailure()

static bool diagReturnOnAllocFailure ( Sema S,
Expr E,
CXXRecordDecl PromiseRecordDecl,
FunctionScopeInfo Fn 
)
static

Definition at line 1027 of file SemaCoroutine.cpp.

References clang::Sema::ActOnCallExpr(), clang::Sema::ActOnCXXThis(), clang::Sema::ActOnFinishFullExpr(), clang::Sema::ActOnFinishFullStmt(), clang::Sema::AFS_Both, clang::Sema::AFS_Class, clang::Sema::AFS_Global, clang::CoroutineBodyStmt::CtorArgs::Allocate, buildBuiltinCall(), clang::Sema::BuildCoreturnStmt(), clang::Sema::BuildDeclarationNameExpr(), clang::Sema::BuildDeclRefExpr(), buildPromiseCall(), clang::Sema::BuildReturnStmt(), buildStdNoThrowDeclRef(), clang::sema::FunctionScopeInfo::CoroutinePromise, clang::Sema::CreateBuiltinUnaryOp(), clang::CoroutineBodyStmt::CtorArgs::Deallocate, clang::Sema::Diag(), clang::Sema::FindAllocationFunctions(), findDeleteForPromise(), clang::sema::FunctionScopeInfo::FirstCoroutineStmtLoc, clang::sema::FunctionScopeInfo::FirstSEHTryLoc, clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Type::getAs(), clang::Sema::getCurScope(), clang::Decl::getDeclContext(), clang::Expr::getExprLoc(), clang::sema::FunctionScopeInfo::getFirstCoroutineStmtKeyword(), clang::LookupResult::getFoundDecl(), clang::Preprocessor::getIdentifierInfo(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::LookupResult::getLookupName(), clang::LookupResult::getRepresentativeDecl(), clang::ValueDecl::getType(), clang::QualType::getTypePtr(), clang::ActionResult< PtrTy, CompressInvalid >::isInvalid(), clang::isLambdaCallOperator(), clang::SourceLocation::isValid(), lookupMember(), clang::Sema::LookupMemberName, clang::Sema::LookupQualifiedName(), clang::None, clang::CoroutineBodyStmt::CtorArgs::OnException, clang::CoroutineBodyStmt::CtorArgs::OnFallthrough, clang::FunctionDecl::parameters(), clang::Sema::PP, clang::Sema::RequireCompleteType(), clang::CoroutineBodyStmt::CtorArgs::ReturnStmtOnAllocFailure, clang::CoroutineBodyStmt::CtorArgs::ReturnValue, and clang::VK_LValue.

◆ findDeleteForPromise()

static FunctionDecl* findDeleteForPromise ( Sema S,
SourceLocation  Loc,
QualType  PromiseType 
)
static

Definition at line 909 of file SemaCoroutine.cpp.

Referenced by diagReturnOnAllocFailure().

◆ isValidCoroutineContext()

static bool isValidCoroutineContext ( Sema S,
SourceLocation  Loc,
StringRef  Keyword 
)
static

Definition at line 188 of file SemaCoroutine.cpp.

◆ lookupCoroutineHandleType()

static QualType lookupCoroutineHandleType ( Sema S,
QualType  PromiseType,
SourceLocation  Loc 
)
static

Look up the std::experimental::coroutine_handle<PromiseType>.

Definition at line 145 of file SemaCoroutine.cpp.

◆ lookupMember() [1/2]

static LookupResult lookupMember ( Sema S,
const char *  Name,
CXXRecordDecl RD,
SourceLocation  Loc,
bool Res 
)
static

Definition at line 31 of file SemaCoroutine.cpp.

Referenced by diagReturnOnAllocFailure().

◆ lookupMember() [2/2]

static bool lookupMember ( Sema S,
const char *  Name,
CXXRecordDecl RD,
SourceLocation  Loc 
)
static

Definition at line 42 of file SemaCoroutine.cpp.

◆ lookupPromiseType()

static QualType lookupPromiseType ( Sema S,
const FunctionDecl FD,
SourceLocation  KwLoc 
)
static

Look up the std::coroutine_traits<...>::promise_type for the given function type.

Definition at line 51 of file SemaCoroutine.cpp.

◆ maybeTailCall()

static Expr* maybeTailCall ( Sema S,
QualType  RetType,
Expr E,
SourceLocation  Loc 
)
static

Definition at line 399 of file SemaCoroutine.cpp.

◆ noteMemberDeclaredHere()

static void noteMemberDeclaredHere ( Sema S,
Expr E,
FunctionScopeInfo Fn 
)
static