clang  6.0.0svn
Classes | Functions
SemaCoroutine.cpp File Reference
#include "CoroutineStmtBuilder.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/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 296 of file SemaCoroutine.cpp.

◆ 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 394 of file SemaCoroutine.cpp.

◆ buildCoroutineHandle()

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

Definition at line 316 of file SemaCoroutine.cpp.

◆ buildMemberCall()

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

Definition at line 350 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 279 of file SemaCoroutine.cpp.

◆ buildOperatorCoawaitCall() [2/2]

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

Definition at line 287 of file SemaCoroutine.cpp.

◆ buildOperatorCoawaitLookupExpr()

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

Definition at line 256 of file SemaCoroutine.cpp.

◆ buildPromiseCall()

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

Definition at line 462 of file SemaCoroutine.cpp.

◆ buildStdNoThrowDeclRef()

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

Look up the std::nothrow object.

Definition at line 765 of file SemaCoroutine.cpp.

◆ 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

Definition at line 1292 of file SemaCoroutine.cpp.

Referenced by buildVarDecl().

◆ checkCoroutineContext()

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

Check that this is a context in which a coroutine suspension can appear.

Definition at line 504 of file SemaCoroutine.cpp.

Referenced by clang::Sema::ActOnCoroutineBodyStart().

◆ diagReturnOnAllocFailure()

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

Definition at line 915 of file SemaCoroutine.cpp.

◆ findDeleteForPromise()

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

Definition at line 796 of file SemaCoroutine.cpp.

◆ isValidCoroutineContext()

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

Definition at line 195 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 152 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 26 of file SemaCoroutine.cpp.

◆ lookupMember() [2/2]

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

Definition at line 37 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 46 of file SemaCoroutine.cpp.

◆ maybeTailCall()

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

Definition at line 370 of file SemaCoroutine.cpp.

◆ noteMemberDeclaredHere()

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

Definition at line 1199 of file SemaCoroutine.cpp.