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()
141 SourceLocation Loc) { in lookupCoroutineHandleType() argument
149 Loc, Sema::LookupOrdinaryName); in lookupCoroutineHandleType()
151 S.Diag(Loc, diag::err_implied_coroutine_type_not_found) in lookupCoroutineHandleType()
166 TemplateArgumentListInfo Args(Loc, Loc); in lookupCoroutineHandleType()
169 S.Context.getTrivialTypeSourceInfo(PromiseType, Loc))); in lookupCoroutineHandleType()
173 S.CheckTemplateIdType(TemplateName(CoroHandle), Loc, Args); in lookupCoroutineHandleType()
176 if (S.RequireCompleteType(Loc, CoroHandleType, in lookupCoroutineHandleType()
183 static bool isValidCoroutineContext(Sema &S, SourceLocation Loc, in isValidCoroutineContext() argument
193 S.Diag(Loc, isa<ObjCMethodDecl>(S.CurContext) in isValidCoroutineContext()
212 S.Diag(Loc, diag::err_coroutine_invalid_func_context) << ID << Keyword; in isValidCoroutineContext()
251 ExprResult Sema::BuildOperatorCoawaitCall(SourceLocation Loc, Expr *E, in BuildOperatorCoawaitCall() argument
255 return CreateOverloadedUnaryOp(Loc, UO_Coawait, Functions, E); in BuildOperatorCoawaitCall()
259 SourceLocation Loc, Expr *E) { in buildOperatorCoawaitCall() argument
260 ExprResult R = SemaRef.BuildOperatorCoawaitLookupExpr(S, Loc); in buildOperatorCoawaitCall()
263 return SemaRef.BuildOperatorCoawaitCall(Loc, E, in buildOperatorCoawaitCall()
268 SourceLocation Loc) { in buildCoroutineHandle() argument
269 QualType CoroHandleType = lookupCoroutineHandleType(S, PromiseType, Loc); in buildCoroutineHandle()
274 LookupResult Found(S, &S.PP.getIdentifierTable().get("from_address"), Loc, in buildCoroutineHandle()
277 S.Diag(Loc, diag::err_coroutine_handle_missing_member) in buildCoroutineHandle()
283 S.BuildBuiltinCallExpr(Loc, Builtin::BI__builtin_coro_frame, {}); in buildCoroutineHandle()
291 return S.BuildCallExpr(nullptr, FromAddr.get(), Loc, FramePtr, Loc); in buildCoroutineHandle()
301 static ExprResult buildMemberCall(Sema &S, Expr *Base, SourceLocation Loc, in buildMemberCall() argument
303 DeclarationNameInfo NameInfo(&S.PP.getIdentifierTable().get(Name), Loc); in buildMemberCall()
308 Base, Base->getType(), Loc, /*IsPtr=*/false, SS, in buildMemberCall()
317 S.Diag(Loc, diag::err_no_member) in buildMemberCall()
323 return S.BuildCallExpr(nullptr, Result.get(), Loc, Args, Loc, nullptr); in buildMemberCall()
331 SourceLocation Loc) { in maybeTailCall() argument
342 ExprResult AddressExpr = buildMemberCall(S, E, Loc, "address", None); in maybeTailCall()
360 return S.BuildBuiltinCallExpr(Loc, Builtin::BI__builtin_coro_resume, in maybeTailCall()
377 SourceLocation Loc, Expr *E) { in buildCoawaitCalls() argument
379 OpaqueValueExpr(Loc, E->getType(), VK_LValue, E->getObjectKind(), E); in buildCoawaitCalls()
389 ExprResult Result = buildMemberCall(S, Operand, Loc, Func, Arg); in buildCoawaitCalls()
410 S.Diag(Loc, diag::note_coroutine_promise_call_implicitly_required) in buildCoawaitCalls()
418 buildCoroutineHandle(S, CoroPromise->getType(), Loc); in buildCoawaitCalls()
437 maybeTailCall(S, RetType, AwaitSuspend, Loc)) in buildCoawaitCalls()
451 S.Diag(Loc, diag::note_coroutine_promise_call_implicitly_required) in buildCoawaitCalls()
469 SourceLocation Loc, StringRef Name, in buildPromiseCall() argument
474 Promise, Promise->getType().getNonReferenceType(), VK_LValue, Loc); in buildPromiseCall()
478 return buildMemberCall(S, PromiseRef.get(), Loc, Name, Args); in buildPromiseCall()
481 VarDecl *Sema::buildCoroutinePromise(SourceLocation Loc) { in buildCoroutinePromise() argument
493 : lookupPromiseType(*this, FD, Loc); in buildCoroutinePromise()
499 Context.getTrivialTypeSourceInfo(T, Loc), SC_None); in buildCoroutinePromise()
514 ExprResult ThisExpr = ActOnCXXThis(Loc); in buildCoroutinePromise()
517 ThisExpr = CreateBuiltinUnaryOp(Loc, UO_Deref, ThisExpr.get()); in buildCoroutinePromise()
585 static FunctionScopeInfo *checkCoroutineContext(Sema &S, SourceLocation Loc, in checkCoroutineContext() argument
588 if (!isValidCoroutineContext(S, Loc, Keyword)) in checkCoroutineContext()
597 ScopeInfo->setFirstCoroutineStmt(Loc, Keyword); in checkCoroutineContext()
602 if (!S.buildCoroutineParameterMoves(Loc)) in checkCoroutineContext()
605 ScopeInfo->CoroutinePromise = S.buildCoroutinePromise(Loc); in checkCoroutineContext()
705 SourceLocation Loc = Fn->getLocation(); in ActOnCoroutineBodyStart() local
709 buildPromiseCall(*this, ScopeInfo->CoroutinePromise, Loc, Name, None); in ActOnCoroutineBodyStart()
713 buildOperatorCoawaitCall(*this, SC, Loc, Operand.get()); in ActOnCoroutineBodyStart()
716 Suspend = BuildResolvedCoawaitExpr(Loc, Operand.get(), Suspend.get(), in ActOnCoroutineBodyStart()
720 Diag(Loc, diag::note_coroutine_promise_suspend_implicitly_required) in ActOnCoroutineBodyStart()
771 static void checkSuspensionContext(Sema &S, SourceLocation Loc, in checkSuspensionContext() argument
777 S.Diag(Loc, diag::err_coroutine_unevaluated_context) << Keyword; in checkSuspensionContext()
781 S.Diag(Loc, diag::err_coroutine_within_handler) << Keyword; in checkSuspensionContext()
784 ExprResult Sema::ActOnCoawaitExpr(Scope *S, SourceLocation Loc, Expr *E) { in ActOnCoawaitExpr() argument
785 if (!ActOnCoroutineBodyStart(S, Loc, "co_await")) { in ActOnCoawaitExpr()
790 checkSuspensionContext(*this, Loc, "co_await"); in ActOnCoawaitExpr()
797 ExprResult Lookup = BuildOperatorCoawaitLookupExpr(S, Loc); in ActOnCoawaitExpr()
800 return BuildUnresolvedCoawaitExpr(Loc, E, in ActOnCoawaitExpr()
804 ExprResult Sema::BuildOperatorCoawaitLookupExpr(Scope *S, SourceLocation Loc) { in BuildOperatorCoawaitLookupExpr() argument
818 DeclarationNameInfo(OpName, Loc), /*RequiresADL*/ true, IsOverloaded, in BuildOperatorCoawaitLookupExpr()
826 ExprResult Sema::BuildUnresolvedCoawaitExpr(SourceLocation Loc, Expr *Operand, in BuildUnresolvedCoawaitExpr() argument
828 auto *FSI = checkCoroutineContext(*this, Loc, "co_await"); in BuildUnresolvedCoawaitExpr()
842 DependentCoawaitExpr(Loc, Context.DependentTy, Operand, Lookup); in BuildUnresolvedCoawaitExpr()
848 if (lookupMember(*this, "await_transform", RD, Loc)) { in BuildUnresolvedCoawaitExpr()
850 buildPromiseCall(*this, Promise, Loc, "await_transform", Operand); in BuildUnresolvedCoawaitExpr()
852 Diag(Loc, in BuildUnresolvedCoawaitExpr()
859 ExprResult Awaiter = BuildOperatorCoawaitCall(Loc, Transformed, Lookup); in BuildUnresolvedCoawaitExpr()
863 return BuildResolvedCoawaitExpr(Loc, Operand, Awaiter.get()); in BuildUnresolvedCoawaitExpr()
866 ExprResult Sema::BuildResolvedCoawaitExpr(SourceLocation Loc, Expr *Operand, in BuildResolvedCoawaitExpr() argument
868 auto *Coroutine = checkCoroutineContext(*this, Loc, "co_await", IsImplicit); in BuildResolvedCoawaitExpr()
880 CoawaitExpr(Loc, Context.DependentTy, Operand, Awaiter, IsImplicit); in BuildResolvedCoawaitExpr()
901 CoawaitExpr(Loc, Operand, Awaiter, RSS.Results[0], RSS.Results[1], in BuildResolvedCoawaitExpr()
907 ExprResult Sema::ActOnCoyieldExpr(Scope *S, SourceLocation Loc, Expr *E) { in ActOnCoyieldExpr() argument
908 if (!ActOnCoroutineBodyStart(S, Loc, "co_yield")) { in ActOnCoyieldExpr()
913 checkSuspensionContext(*this, Loc, "co_yield"); in ActOnCoyieldExpr()
917 *this, getCurFunction()->CoroutinePromise, Loc, "yield_value", E); in ActOnCoyieldExpr()
922 Awaitable = buildOperatorCoawaitCall(*this, S, Loc, Awaitable.get()); in ActOnCoyieldExpr()
926 return BuildCoyieldExpr(Loc, Awaitable.get()); in ActOnCoyieldExpr()
928 ExprResult Sema::BuildCoyieldExpr(SourceLocation Loc, Expr *E) { in BuildCoyieldExpr() argument
929 auto *Coroutine = checkCoroutineContext(*this, Loc, "co_yield"); in BuildCoyieldExpr()
942 Expr *Res = new (Context) CoyieldExpr(Loc, Context.DependentTy, Operand, E); in BuildCoyieldExpr()
953 *this, Coroutine->CoroutinePromise, Loc, E); in BuildCoyieldExpr()
958 new (Context) CoyieldExpr(Loc, Operand, E, RSS.Results[0], RSS.Results[1], in BuildCoyieldExpr()
964 StmtResult Sema::ActOnCoreturnStmt(Scope *S, SourceLocation Loc, Expr *E) { in ActOnCoreturnStmt() argument
965 if (!ActOnCoroutineBodyStart(S, Loc, "co_return")) { in ActOnCoreturnStmt()
969 return BuildCoreturnStmt(Loc, E); in ActOnCoreturnStmt()
972 StmtResult Sema::BuildCoreturnStmt(SourceLocation Loc, Expr *E, in BuildCoreturnStmt() argument
974 auto *FSI = checkCoroutineContext(*this, Loc, "co_return", IsImplicit); in BuildCoreturnStmt()
989 PC = buildPromiseCall(*this, Promise, Loc, "return_value", E); in BuildCoreturnStmt()
992 PC = buildPromiseCall(*this, Promise, Loc, "return_void", None); in BuildCoreturnStmt()
999 Stmt *Res = new (Context) CoreturnStmt(Loc, E, PCE, IsImplicit); in BuildCoreturnStmt()
1004 static Expr *buildStdNoThrowDeclRef(Sema &S, SourceLocation Loc) { in buildStdNoThrowDeclRef() argument
1008 LookupResult Result(S, &S.PP.getIdentifierTable().get("nothrow"), Loc, in buildStdNoThrowDeclRef()
1013 S.Diag(Loc, diag::err_implicit_coroutine_std_nothrow_type_not_found); in buildStdNoThrowDeclRef()
1026 ExprResult DR = S.BuildDeclRefExpr(VD, VD->getType(), VK_LValue, Loc); in buildStdNoThrowDeclRef()
1034 static FunctionDecl *findDeleteForPromise(Sema &S, SourceLocation Loc, in findDeleteForPromise() argument
1048 if (S.FindDeallocationFunction(Loc, PointeeRD, DeleteName, OperatorDelete)) in findDeleteForPromise()
1061 const bool CanProvideSize = S.isCompleteType(Loc, PromiseType); in findDeleteForPromise()
1063 OperatorDelete = S.FindUsualDeallocationFunction(Loc, CanProvideSize, in findDeleteForPromise()
1066 S.MarkFunctionReferenced(Loc, OperatorDelete); in findDeleteForPromise()
1117 : S(S), FD(FD), Fn(Fn), Loc(FD.getLocation()), in CoroutineStmtBuilder()
1156 S.ActOnDeclStmt(S.ConvertDeclToDeclGroup(Fn.CoroutinePromise), Loc, Loc); in makePromiseStmt()
1175 auto Loc = E->getExprLoc(); in diagReturnOnAllocFailure() local
1182 Loc = Decl->getLocation(); in diagReturnOnAllocFailure()
1187 Loc, in diagReturnOnAllocFailure()
1210 LookupResult Found(S, DN, Loc, Sema::LookupMemberName); in makeReturnOnAllocFailure()
1224 S.BuildCallExpr(nullptr, DeclNameExpr.get(), Loc, {}, Loc); in makeReturnOnAllocFailure()
1229 S.BuildReturnStmt(Loc, ReturnObjectOnAllocationFailure.get()); in makeReturnOnAllocFailure()
1245 static bool collectPlacementArgs(Sema &S, FunctionDecl &FD, SourceLocation Loc, in collectPlacementArgs() argument
1249 ExprResult ThisExpr = S.ActOnCXXThis(Loc); in collectPlacementArgs()
1252 ThisExpr = S.CreateBuiltinUnaryOp(Loc, UO_Deref, ThisExpr.get()); in collectPlacementArgs()
1283 if (S.RequireCompleteType(Loc, PromiseType, diag::err_incomplete_type)) in makeNewAndDeleteExpr()
1330 LookupResult R(S, NewName, Loc, Sema::LookupOrdinaryName); in makeNewAndDeleteExpr()
1347 S.FindAllocationFunctions(Loc, SourceRange(), in makeNewAndDeleteExpr()
1357 if (PromiseContainsNew && !collectPlacementArgs(S, FD, Loc, PlacementArgs)) in makeNewAndDeleteExpr()
1377 auto *StdNoThrow = buildStdNoThrowDeclRef(S, Loc); in makeNewAndDeleteExpr()
1382 S.FindAllocationFunctions(Loc, SourceRange(), /*NewScope*/ Sema::AFS_Both, in makeNewAndDeleteExpr()
1390 S.Diag(Loc, diag::err_coroutine_unusable_new) << PromiseType << &FD; in makeNewAndDeleteExpr()
1401 S.Diag(Loc, diag::note_coroutine_promise_call_implicitly_required) in makeNewAndDeleteExpr()
1407 if ((OperatorDelete = findDeleteForPromise(S, Loc, PromiseType)) == nullptr) { in makeNewAndDeleteExpr()
1415 S.BuildBuiltinCallExpr(Loc, Builtin::BI__builtin_coro_frame, {}); in makeNewAndDeleteExpr()
1418 S.BuildBuiltinCallExpr(Loc, Builtin::BI__builtin_coro_size, {}); in makeNewAndDeleteExpr()
1423 S.BuildDeclRefExpr(OperatorNew, OperatorNew->getType(), VK_LValue, Loc); in makeNewAndDeleteExpr()
1431 S.BuildCallExpr(S.getCurScope(), NewRef.get(), Loc, NewArgs, Loc); in makeNewAndDeleteExpr()
1441 S.BuildDeclRefExpr(OperatorDelete, OpDeleteQualType, VK_LValue, Loc); in makeNewAndDeleteExpr()
1446 S.BuildBuiltinCallExpr(Loc, Builtin::BI__builtin_coro_free, {FramePtr}); in makeNewAndDeleteExpr()
1461 S.BuildCallExpr(S.getCurScope(), DeleteRef.get(), Loc, DeleteArgs, Loc); in makeNewAndDeleteExpr()
1486 lookupMember(S, "return_void", PromiseRecordDecl, Loc, HasRVoid); in makeOnFallthrough()
1488 lookupMember(S, "return_value", PromiseRecordDecl, Loc, HasRValue); in makeOnFallthrough()
1536 if (!lookupMember(S, "unhandled_exception", PromiseRecordDecl, Loc)) { in makeOnException()
1542 S.Diag(Loc, DiagID) << PromiseRecordDecl; in makeOnException()
1552 ExprResult UnhandledException = buildPromiseCall(S, Fn.CoroutinePromise, Loc, in makeOnException()
1554 UnhandledException = S.ActOnFinishFullExpr(UnhandledException.get(), Loc, in makeOnException()
1577 buildPromiseCall(S, Fn.CoroutinePromise, Loc, "get_return_object", None); in makeReturnObject()
1610 S.ActOnFinishFullExpr(this->ReturnValue, Loc, /*DiscardedValue*/ false); in makeGroDeclAndReturnStmt()
1620 InitializedEntity::InitializeResult(Loc, FnRetType); in makeGroDeclAndReturnStmt()
1626 StmtResult ReturnStmt = S.BuildReturnStmt(Loc, ReturnValue); in makeGroDeclAndReturnStmt()
1653 static VarDecl *buildVarDecl(Sema &S, SourceLocation Loc, QualType Type, in buildVarDecl() argument
1655 TypeSourceInfo *TInfo = S.Context.getTrivialTypeSourceInfo(Type, Loc); in buildVarDecl()
1656 VarDecl *Decl = VarDecl::Create(S.Context, S.CurContext, Loc, Loc, II, Type, in buildVarDecl()
1664 bool Sema::buildCoroutineParameterMoves(SourceLocation Loc) { in buildCoroutineParameterMoves() argument
1684 ExprValueKind::VK_LValue, Loc); // FIXME: scope? in buildCoroutineParameterMoves()
1697 auto D = buildVarDecl(*this, Loc, PD->getType(), PD->getIdentifier()); in buildCoroutineParameterMoves()
1701 StmtResult Stmt = ActOnDeclStmt(ConvertDeclToDeclGroup(D), Loc, Loc); in buildCoroutineParameterMoves()