Lines Matching refs:Loc
33 SourceLocation Loc, bool &Res) { in lookupMember() argument
35 LookupResult LR(S, DN, Loc, Sema::LookupMemberName); in lookupMember()
44 SourceLocation Loc) { in lookupMember() argument
46 lookupMember(S, Name, RD, Loc, Res); in lookupMember()
146 SourceLocation Loc) { in lookupCoroutineHandleType() argument
154 Loc, Sema::LookupOrdinaryName); in lookupCoroutineHandleType()
156 S.Diag(Loc, diag::err_implied_coroutine_type_not_found) in lookupCoroutineHandleType()
171 TemplateArgumentListInfo Args(Loc, Loc); in lookupCoroutineHandleType()
174 S.Context.getTrivialTypeSourceInfo(PromiseType, Loc))); in lookupCoroutineHandleType()
178 S.CheckTemplateIdType(TemplateName(CoroHandle), Loc, Args); in lookupCoroutineHandleType()
181 if (S.RequireCompleteType(Loc, CoroHandleType, in lookupCoroutineHandleType()
188 static bool isValidCoroutineContext(Sema &S, SourceLocation Loc, in isValidCoroutineContext() argument
198 S.Diag(Loc, isa<ObjCMethodDecl>(S.CurContext) in isValidCoroutineContext()
217 S.Diag(Loc, diag::err_coroutine_invalid_func_context) << ID << Keyword; in isValidCoroutineContext()
255 SourceLocation Loc) { in buildOperatorCoawaitLookupExpr() argument
269 DeclarationNameInfo(OpName, Loc), /*RequiresADL*/ true, IsOverloaded, in buildOperatorCoawaitLookupExpr()
277 static ExprResult buildOperatorCoawaitCall(Sema &SemaRef, SourceLocation Loc, in buildOperatorCoawaitCall() argument
282 return SemaRef.CreateOverloadedUnaryOp(Loc, UO_Coawait, Functions, E); in buildOperatorCoawaitCall()
286 SourceLocation Loc, Expr *E) { in buildOperatorCoawaitCall() argument
287 ExprResult R = buildOperatorCoawaitLookupExpr(SemaRef, S, Loc); in buildOperatorCoawaitCall()
290 return buildOperatorCoawaitCall(SemaRef, Loc, E, in buildOperatorCoawaitCall()
295 SourceLocation Loc) { in buildCoroutineHandle() argument
296 QualType CoroHandleType = lookupCoroutineHandleType(S, PromiseType, Loc); in buildCoroutineHandle()
301 LookupResult Found(S, &S.PP.getIdentifierTable().get("from_address"), Loc, in buildCoroutineHandle()
304 S.Diag(Loc, diag::err_coroutine_handle_missing_member) in buildCoroutineHandle()
310 S.BuildBuiltinCallExpr(Loc, Builtin::BI__builtin_coro_frame, {}); in buildCoroutineHandle()
318 return S.BuildCallExpr(nullptr, FromAddr.get(), Loc, FramePtr, Loc); in buildCoroutineHandle()
328 static ExprResult buildMemberCall(Sema &S, Expr *Base, SourceLocation Loc, in buildMemberCall() argument
330 DeclarationNameInfo NameInfo(&S.PP.getIdentifierTable().get(Name), Loc); in buildMemberCall()
335 Base, Base->getType(), Loc, /*IsPtr=*/false, SS, in buildMemberCall()
344 S.Diag(Loc, diag::err_no_member) in buildMemberCall()
350 return S.BuildCallExpr(nullptr, Result.get(), Loc, Args, Loc, nullptr); in buildMemberCall()
358 SourceLocation Loc) { in maybeTailCall() argument
369 ExprResult AddressExpr = buildMemberCall(S, E, Loc, "address", None); in maybeTailCall()
387 return S.BuildBuiltinCallExpr(Loc, Builtin::BI__builtin_coro_resume, in maybeTailCall()
404 SourceLocation Loc, Expr *E) { in buildCoawaitCalls() argument
406 OpaqueValueExpr(Loc, E->getType(), VK_LValue, E->getObjectKind(), E); in buildCoawaitCalls()
416 ExprResult Result = buildMemberCall(S, Operand, Loc, Func, Arg); in buildCoawaitCalls()
437 S.Diag(Loc, diag::note_coroutine_promise_call_implicitly_required) in buildCoawaitCalls()
445 buildCoroutineHandle(S, CoroPromise->getType(), Loc); in buildCoawaitCalls()
464 maybeTailCall(S, RetType, AwaitSuspend, Loc)) in buildCoawaitCalls()
478 S.Diag(Loc, diag::note_coroutine_promise_call_implicitly_required) in buildCoawaitCalls()
496 SourceLocation Loc, StringRef Name, in buildPromiseCall() argument
501 Promise, Promise->getType().getNonReferenceType(), VK_LValue, Loc); in buildPromiseCall()
505 return buildMemberCall(S, PromiseRef.get(), Loc, Name, Args); in buildPromiseCall()
508 VarDecl *Sema::buildCoroutinePromise(SourceLocation Loc) { in buildCoroutinePromise() argument
520 : lookupPromiseType(*this, FD, Loc); in buildCoroutinePromise()
526 Context.getTrivialTypeSourceInfo(T, Loc), SC_None); in buildCoroutinePromise()
541 ExprResult ThisExpr = ActOnCXXThis(Loc); in buildCoroutinePromise()
544 ThisExpr = CreateBuiltinUnaryOp(Loc, UO_Deref, ThisExpr.get()); in buildCoroutinePromise()
608 static FunctionScopeInfo *checkCoroutineContext(Sema &S, SourceLocation Loc, in checkCoroutineContext() argument
611 if (!isValidCoroutineContext(S, Loc, Keyword)) in checkCoroutineContext()
620 ScopeInfo->setFirstCoroutineStmt(Loc, Keyword); in checkCoroutineContext()
625 if (!S.buildCoroutineParameterMoves(Loc)) in checkCoroutineContext()
628 ScopeInfo->CoroutinePromise = S.buildCoroutinePromise(Loc); in checkCoroutineContext()
724 SourceLocation Loc = Fn->getLocation(); in ActOnCoroutineBodyStart() local
728 buildPromiseCall(*this, ScopeInfo->CoroutinePromise, Loc, Name, None); in ActOnCoroutineBodyStart()
731 Suspend = buildOperatorCoawaitCall(*this, SC, Loc, Suspend.get()); in ActOnCoroutineBodyStart()
734 Suspend = BuildResolvedCoawaitExpr(Loc, Suspend.get(), in ActOnCoroutineBodyStart()
738 Diag(Loc, diag::note_coroutine_promise_suspend_implicitly_required) in ActOnCoroutineBodyStart()
789 static void checkSuspensionContext(Sema &S, SourceLocation Loc, in checkSuspensionContext() argument
795 S.Diag(Loc, diag::err_coroutine_unevaluated_context) << Keyword; in checkSuspensionContext()
799 S.Diag(Loc, diag::err_coroutine_within_handler) << Keyword; in checkSuspensionContext()
802 ExprResult Sema::ActOnCoawaitExpr(Scope *S, SourceLocation Loc, Expr *E) { in ActOnCoawaitExpr() argument
803 if (!ActOnCoroutineBodyStart(S, Loc, "co_await")) { in ActOnCoawaitExpr()
808 checkSuspensionContext(*this, Loc, "co_await"); in ActOnCoawaitExpr()
815 ExprResult Lookup = buildOperatorCoawaitLookupExpr(*this, S, Loc); in ActOnCoawaitExpr()
818 return BuildUnresolvedCoawaitExpr(Loc, E, in ActOnCoawaitExpr()
822 ExprResult Sema::BuildUnresolvedCoawaitExpr(SourceLocation Loc, Expr *E, in BuildUnresolvedCoawaitExpr() argument
824 auto *FSI = checkCoroutineContext(*this, Loc, "co_await"); in BuildUnresolvedCoawaitExpr()
838 new (Context) DependentCoawaitExpr(Loc, Context.DependentTy, E, Lookup); in BuildUnresolvedCoawaitExpr()
843 if (lookupMember(*this, "await_transform", RD, Loc)) { in BuildUnresolvedCoawaitExpr()
844 ExprResult R = buildPromiseCall(*this, Promise, Loc, "await_transform", E); in BuildUnresolvedCoawaitExpr()
846 Diag(Loc, in BuildUnresolvedCoawaitExpr()
853 ExprResult Awaitable = buildOperatorCoawaitCall(*this, Loc, E, Lookup); in BuildUnresolvedCoawaitExpr()
857 return BuildResolvedCoawaitExpr(Loc, Awaitable.get()); in BuildUnresolvedCoawaitExpr()
860 ExprResult Sema::BuildResolvedCoawaitExpr(SourceLocation Loc, Expr *E, in BuildResolvedCoawaitExpr() argument
862 auto *Coroutine = checkCoroutineContext(*this, Loc, "co_await", IsImplicit); in BuildResolvedCoawaitExpr()
874 CoawaitExpr(Loc, Context.DependentTy, E, IsImplicit); in BuildResolvedCoawaitExpr()
895 new (Context) CoawaitExpr(Loc, E, RSS.Results[0], RSS.Results[1], in BuildResolvedCoawaitExpr()
901 ExprResult Sema::ActOnCoyieldExpr(Scope *S, SourceLocation Loc, Expr *E) { in ActOnCoyieldExpr() argument
902 if (!ActOnCoroutineBodyStart(S, Loc, "co_yield")) { in ActOnCoyieldExpr()
907 checkSuspensionContext(*this, Loc, "co_yield"); in ActOnCoyieldExpr()
911 *this, getCurFunction()->CoroutinePromise, Loc, "yield_value", E); in ActOnCoyieldExpr()
916 Awaitable = buildOperatorCoawaitCall(*this, S, Loc, Awaitable.get()); in ActOnCoyieldExpr()
920 return BuildCoyieldExpr(Loc, Awaitable.get()); in ActOnCoyieldExpr()
922 ExprResult Sema::BuildCoyieldExpr(SourceLocation Loc, Expr *E) { in BuildCoyieldExpr() argument
923 auto *Coroutine = checkCoroutineContext(*this, Loc, "co_yield"); in BuildCoyieldExpr()
934 Expr *Res = new (Context) CoyieldExpr(Loc, Context.DependentTy, E); in BuildCoyieldExpr()
945 *this, Coroutine->CoroutinePromise, Loc, E); in BuildCoyieldExpr()
950 new (Context) CoyieldExpr(Loc, E, RSS.Results[0], RSS.Results[1], in BuildCoyieldExpr()
956 StmtResult Sema::ActOnCoreturnStmt(Scope *S, SourceLocation Loc, Expr *E) { in ActOnCoreturnStmt() argument
957 if (!ActOnCoroutineBodyStart(S, Loc, "co_return")) { in ActOnCoreturnStmt()
961 return BuildCoreturnStmt(Loc, E); in ActOnCoreturnStmt()
964 StmtResult Sema::BuildCoreturnStmt(SourceLocation Loc, Expr *E, in BuildCoreturnStmt() argument
966 auto *FSI = checkCoroutineContext(*this, Loc, "co_return", IsImplicit); in BuildCoreturnStmt()
981 PC = buildPromiseCall(*this, Promise, Loc, "return_value", E); in BuildCoreturnStmt()
984 PC = buildPromiseCall(*this, Promise, Loc, "return_void", None); in BuildCoreturnStmt()
991 Stmt *Res = new (Context) CoreturnStmt(Loc, E, PCE, IsImplicit); in BuildCoreturnStmt()
996 static Expr *buildStdNoThrowDeclRef(Sema &S, SourceLocation Loc) { in buildStdNoThrowDeclRef() argument
1000 LookupResult Result(S, &S.PP.getIdentifierTable().get("nothrow"), Loc, in buildStdNoThrowDeclRef()
1006 S.Diag(Loc, diag::err_implicit_coroutine_std_nothrow_type_not_found); in buildStdNoThrowDeclRef()
1019 ExprResult DR = S.BuildDeclRefExpr(VD, VD->getType(), VK_LValue, Loc); in buildStdNoThrowDeclRef()
1027 static FunctionDecl *findDeleteForPromise(Sema &S, SourceLocation Loc, in findDeleteForPromise() argument
1037 if (S.FindDeallocationFunction(Loc, PointeeRD, DeleteName, OperatorDelete)) in findDeleteForPromise()
1042 const bool CanProvideSize = S.isCompleteType(Loc, PromiseType); in findDeleteForPromise()
1044 OperatorDelete = S.FindUsualDeallocationFunction(Loc, CanProvideSize, in findDeleteForPromise()
1047 S.MarkFunctionReferenced(Loc, OperatorDelete); in findDeleteForPromise()
1090 : S(S), FD(FD), Fn(Fn), Loc(FD.getLocation()), in CoroutineStmtBuilder()
1129 S.ActOnDeclStmt(S.ConvertDeclToDeclGroup(Fn.CoroutinePromise), Loc, Loc); in makePromiseStmt()
1148 auto Loc = E->getExprLoc(); in diagReturnOnAllocFailure() local
1155 Loc = Decl->getLocation(); in diagReturnOnAllocFailure()
1160 Loc, in diagReturnOnAllocFailure()
1180 LookupResult Found(S, DN, Loc, Sema::LookupMemberName); in makeReturnOnAllocFailure()
1194 S.BuildCallExpr(nullptr, DeclNameExpr.get(), Loc, {}, Loc); in makeReturnOnAllocFailure()
1199 S.BuildReturnStmt(Loc, ReturnObjectOnAllocationFailure.get()); in makeReturnOnAllocFailure()
1218 if (S.RequireCompleteType(Loc, PromiseType, diag::err_incomplete_type)) in makeNewAndDeleteExpr()
1253 ExprResult ThisExpr = S.ActOnCXXThis(Loc); in makeNewAndDeleteExpr()
1256 ThisExpr = S.CreateBuiltinUnaryOp(Loc, UO_Deref, ThisExpr.get()); in makeNewAndDeleteExpr()
1276 S.FindAllocationFunctions(Loc, SourceRange(), /*NewScope*/ Sema::AFS_Class, in makeNewAndDeleteExpr()
1287 S.FindAllocationFunctions(Loc, SourceRange(), /*NewScope*/ Sema::AFS_Class, in makeNewAndDeleteExpr()
1298 S.FindAllocationFunctions(Loc, SourceRange(), /*NewScope*/ Sema::AFS_Global, in makeNewAndDeleteExpr()
1310 auto *StdNoThrow = buildStdNoThrowDeclRef(S, Loc); in makeNewAndDeleteExpr()
1315 S.FindAllocationFunctions(Loc, SourceRange(), /*NewScope*/ Sema::AFS_Both, in makeNewAndDeleteExpr()
1330 S.Diag(Loc, diag::note_coroutine_promise_call_implicitly_required) in makeNewAndDeleteExpr()
1336 if ((OperatorDelete = findDeleteForPromise(S, Loc, PromiseType)) == nullptr) in makeNewAndDeleteExpr()
1340 S.BuildBuiltinCallExpr(Loc, Builtin::BI__builtin_coro_frame, {}); in makeNewAndDeleteExpr()
1343 S.BuildBuiltinCallExpr(Loc, Builtin::BI__builtin_coro_size, {}); in makeNewAndDeleteExpr()
1348 S.BuildDeclRefExpr(OperatorNew, OperatorNew->getType(), VK_LValue, Loc); in makeNewAndDeleteExpr()
1357 S.BuildCallExpr(S.getCurScope(), NewRef.get(), Loc, NewArgs, Loc); in makeNewAndDeleteExpr()
1367 S.BuildDeclRefExpr(OperatorDelete, OpDeleteQualType, VK_LValue, Loc); in makeNewAndDeleteExpr()
1372 S.BuildBuiltinCallExpr(Loc, Builtin::BI__builtin_coro_free, {FramePtr}); in makeNewAndDeleteExpr()
1383 S.BuildCallExpr(S.getCurScope(), DeleteRef.get(), Loc, DeleteArgs, Loc); in makeNewAndDeleteExpr()
1404 lookupMember(S, "return_void", PromiseRecordDecl, Loc, HasRVoid); in makeOnFallthrough()
1406 lookupMember(S, "return_value", PromiseRecordDecl, Loc, HasRValue); in makeOnFallthrough()
1452 if (!lookupMember(S, "unhandled_exception", PromiseRecordDecl, Loc)) { in makeOnException()
1458 S.Diag(Loc, DiagID) << PromiseRecordDecl; in makeOnException()
1468 ExprResult UnhandledException = buildPromiseCall(S, Fn.CoroutinePromise, Loc, in makeOnException()
1470 UnhandledException = S.ActOnFinishFullExpr(UnhandledException.get(), Loc, in makeOnException()
1492 buildPromiseCall(S, Fn.CoroutinePromise, Loc, "get_return_object", None); in makeReturnObject()
1525 S.ActOnFinishFullExpr(this->ReturnValue, Loc, /*DiscardedValue*/ false); in makeGroDeclAndReturnStmt()
1536 InitializedEntity::InitializeResult(Loc, FnRetType); in makeGroDeclAndReturnStmt()
1545 S.Context.getTrivialTypeSourceInfo(GroType, Loc), SC_None); in makeGroDeclAndReturnStmt()
1570 S.ActOnDeclStmt(S.ConvertDeclToDeclGroup(GroDecl), Loc, Loc); in makeGroDeclAndReturnStmt()
1576 ExprResult declRef = S.BuildDeclRefExpr(GroDecl, GroType, VK_LValue, Loc); in makeGroDeclAndReturnStmt()
1580 StmtResult ReturnStmt = S.BuildReturnStmt(Loc, declRef.get()); in makeGroDeclAndReturnStmt()
1609 static VarDecl *buildVarDecl(Sema &S, SourceLocation Loc, QualType Type, in buildVarDecl() argument
1611 TypeSourceInfo *TInfo = S.Context.getTrivialTypeSourceInfo(Type, Loc); in buildVarDecl()
1612 VarDecl *Decl = VarDecl::Create(S.Context, S.CurContext, Loc, Loc, II, Type, in buildVarDecl()
1620 bool Sema::buildCoroutineParameterMoves(SourceLocation Loc) { in buildCoroutineParameterMoves() argument
1634 ExprValueKind::VK_LValue, Loc); // FIXME: scope? in buildCoroutineParameterMoves()
1645 auto D = buildVarDecl(*this, Loc, PD->getType(), PD->getIdentifier()); in buildCoroutineParameterMoves()
1649 StmtResult Stmt = ActOnDeclStmt(ConvertDeclToDeclGroup(D), Loc, Loc); in buildCoroutineParameterMoves()