Lines Matching refs:TheCall

153 static bool SemaBuiltinAnnotation(Sema &S, CallExpr *TheCall) {  in SemaBuiltinAnnotation()  argument
154 if (checkArgCount(S, TheCall, 2)) in SemaBuiltinAnnotation()
158 Expr *ValArg = TheCall->getArg(0); in SemaBuiltinAnnotation()
167 Expr *StrArg = TheCall->getArg(1)->IgnoreParenCasts(); in SemaBuiltinAnnotation()
175 TheCall->setType(Ty); in SemaBuiltinAnnotation()
179 static bool SemaBuiltinMSVCAnnotation(Sema &S, CallExpr *TheCall) { in SemaBuiltinMSVCAnnotation() argument
181 if (TheCall->getNumArgs() < 1) { in SemaBuiltinMSVCAnnotation()
182 S.Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) in SemaBuiltinMSVCAnnotation()
183 << 0 << 1 << TheCall->getNumArgs() in SemaBuiltinMSVCAnnotation()
184 << TheCall->getCallee()->getSourceRange(); in SemaBuiltinMSVCAnnotation()
189 for (Expr *Arg : TheCall->arguments()) { in SemaBuiltinMSVCAnnotation()
203 static bool SemaBuiltinAddressof(Sema &S, CallExpr *TheCall) { in SemaBuiltinAddressof() argument
204 if (checkArgCount(S, TheCall, 1)) in SemaBuiltinAddressof()
207 ExprResult Arg(TheCall->getArg(0)); in SemaBuiltinAddressof()
208 QualType ResultType = S.CheckAddressOfOperand(Arg, TheCall->getBeginLoc()); in SemaBuiltinAddressof()
212 TheCall->setArg(0, Arg.get()); in SemaBuiltinAddressof()
213 TheCall->setType(ResultType); in SemaBuiltinAddressof()
218 static bool SemaBuiltinFunctionStart(Sema &S, CallExpr *TheCall) { in SemaBuiltinFunctionStart() argument
219 if (checkArgCount(S, TheCall, 1)) in SemaBuiltinFunctionStart()
222 ExprResult Arg = S.DefaultFunctionArrayLvalueConversion(TheCall->getArg(0)); in SemaBuiltinFunctionStart()
226 TheCall->setArg(0, Arg.get()); in SemaBuiltinFunctionStart()
231 S.Diag(TheCall->getBeginLoc(), diag::err_function_start_invalid_type) in SemaBuiltinFunctionStart()
232 << TheCall->getSourceRange(); in SemaBuiltinFunctionStart()
237 TheCall->getBeginLoc()); in SemaBuiltinFunctionStart()
242 static bool SemaBuiltinPreserveAI(Sema &S, CallExpr *TheCall) { in SemaBuiltinPreserveAI() argument
243 if (checkArgCount(S, TheCall, 1)) in SemaBuiltinPreserveAI()
246 TheCall->setType(TheCall->getArg(0)->getType()); in SemaBuiltinPreserveAI()
253 static bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) { in SemaBuiltinAlignment() argument
254 if (checkArgCount(S, TheCall, 2)) in SemaBuiltinAlignment()
257 clang::Expr *Source = TheCall->getArg(0); in SemaBuiltinAlignment()
277 clang::Expr *AlignOp = TheCall->getArg(1); in SemaBuiltinAlignment()
316 TheCall->setArg(0, SrcArg.get()); in SemaBuiltinAlignment()
323 TheCall->setArg(1, AlignArg.get()); in SemaBuiltinAlignment()
327 TheCall->setType(IsBooleanAlignBuiltin ? S.Context.BoolTy : SrcTy); in SemaBuiltinAlignment()
331 static bool SemaBuiltinOverflow(Sema &S, CallExpr *TheCall, in SemaBuiltinOverflow() argument
333 if (checkArgCount(S, TheCall, 3)) in SemaBuiltinOverflow()
338 ExprResult Arg = S.DefaultFunctionArrayLvalueConversion(TheCall->getArg(I)); in SemaBuiltinOverflow()
340 TheCall->setArg(I, Arg.get()); in SemaBuiltinOverflow()
354 ExprResult Arg = S.DefaultFunctionArrayLvalueConversion(TheCall->getArg(2)); in SemaBuiltinOverflow()
356 TheCall->setArg(2, Arg.get()); in SemaBuiltinOverflow()
374 const auto Arg = TheCall->getArg(I); in SemaBuiltinOverflow()
391 CallExpr *TheCall; member
392 SourceLocation Loc = TheCall->getBeginLoc();
397 BuiltinDumpStructGenerator(Sema &S, CallExpr *TheCall) in BuiltinDumpStructGenerator()
398 : S(S), TheCall(TheCall), ErrorTracker(S.getDiagnostics()), in BuiltinDumpStructGenerator()
420 assert(TheCall->getNumArgs() >= 2);
421 Args.reserve((TheCall->getNumArgs() - 2) + /*Format*/ 1 + Exprs.size());
422 Args.assign(TheCall->arg_begin() + 2, TheCall->arg_end());
435 S.BuildCallExpr(/*Scope=*/nullptr, TheCall->getArg(1),
436 TheCall->getBeginLoc(), Args, TheCall->getRParenLoc());
623 auto *Wrapper = PseudoObjectExpr::Create(S.Context, TheCall, Actions, in buildWrapper()
625 TheCall->setType(Wrapper->getType()); in buildWrapper()
626 TheCall->setValueKind(Wrapper->getValueKind()); in buildWrapper()
632 static ExprResult SemaBuiltinDumpStruct(Sema &S, CallExpr *TheCall) { in SemaBuiltinDumpStruct() argument
633 if (checkArgCountAtLeast(S, TheCall, 2)) in SemaBuiltinDumpStruct()
636 ExprResult PtrArgResult = S.DefaultLvalueConversion(TheCall->getArg(0)); in SemaBuiltinDumpStruct()
639 TheCall->setArg(0, PtrArgResult.get()); in SemaBuiltinDumpStruct()
647 << 1 << TheCall->getDirectCallee() << PtrArgType; in SemaBuiltinDumpStruct()
654 QualType FnArgType = TheCall->getArg(1)->getType(); in SemaBuiltinDumpStruct()
670 S.Diag(TheCall->getArg(1)->getBeginLoc(), in SemaBuiltinDumpStruct()
672 << 2 << TheCall->getDirectCallee() << FnArgType; in SemaBuiltinDumpStruct()
677 BuiltinDumpStructGenerator Generator(S, TheCall); in SemaBuiltinDumpStruct()
998 CallExpr *TheCall) { in checkFortifiedBuiltinMemoryFunction() argument
999 if (TheCall->isValueDependent() || TheCall->isTypeDependent() || in checkFortifiedBuiltinMemoryFunction()
1032 if (NewIndex >= TheCall->getNumArgs()) in checkFortifiedBuiltinMemoryFunction()
1044 Expr *SizeArg = TheCall->getArg(NewIndex); in checkFortifiedBuiltinMemoryFunction()
1069 const Expr *ObjArg = TheCall->getArg(NewIndex); in checkFortifiedBuiltinMemoryFunction()
1084 const Expr *ObjArg = TheCall->getArg(NewIndex); in checkFortifiedBuiltinMemoryFunction()
1141 TheCall->getArg(FormatIndex)->IgnoreParenImpCasts(); in checkFortifiedBuiltinMemoryFunction()
1155 DiagRuntimeBehavior(TheCall->getArg(Index)->getBeginLoc(), TheCall, in checkFortifiedBuiltinMemoryFunction()
1188 auto *FormatExpr = TheCall->getArg(FormatIndex)->IgnoreParenImpCasts(); in checkFortifiedBuiltinMemoryFunction()
1234 SourceSize = ComputeExplicitObjectSizeArgument(TheCall->getNumArgs() - 2); in checkFortifiedBuiltinMemoryFunction()
1236 ComputeExplicitObjectSizeArgument(TheCall->getNumArgs() - 1); in checkFortifiedBuiltinMemoryFunction()
1262 SourceSize = ComputeExplicitObjectSizeArgument(TheCall->getNumArgs() - 1); in checkFortifiedBuiltinMemoryFunction()
1276 SourceSize = ComputeExplicitObjectSizeArgument(TheCall->getNumArgs() - 1); in checkFortifiedBuiltinMemoryFunction()
1301 DiagRuntimeBehavior(TheCall->getBeginLoc(), TheCall, in checkFortifiedBuiltinMemoryFunction()
1306 static bool SemaBuiltinSEHScopeCheck(Sema &SemaRef, CallExpr *TheCall, in SemaBuiltinSEHScopeCheck() argument
1319 auto *DRE = cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts()); in SemaBuiltinSEHScopeCheck()
1320 SemaRef.Diag(TheCall->getExprLoc(), DiagID) in SemaBuiltinSEHScopeCheck()
1382 static bool SemaOpenCLBuiltinNDRangeAndBlock(Sema &S, CallExpr *TheCall) { in SemaOpenCLBuiltinNDRangeAndBlock() argument
1383 if (checkArgCount(S, TheCall, 2)) in SemaOpenCLBuiltinNDRangeAndBlock()
1386 if (checkOpenCLSubgroupExt(S, TheCall)) in SemaOpenCLBuiltinNDRangeAndBlock()
1390 Expr *NDRangeArg = TheCall->getArg(0); in SemaOpenCLBuiltinNDRangeAndBlock()
1393 << TheCall->getDirectCallee() << "'ndrange_t'"; in SemaOpenCLBuiltinNDRangeAndBlock()
1397 Expr *BlockArg = TheCall->getArg(1); in SemaOpenCLBuiltinNDRangeAndBlock()
1400 << TheCall->getDirectCallee() << "block"; in SemaOpenCLBuiltinNDRangeAndBlock()
1409 static bool SemaOpenCLBuiltinKernelWorkGroupSize(Sema &S, CallExpr *TheCall) { in SemaOpenCLBuiltinKernelWorkGroupSize() argument
1410 if (checkArgCount(S, TheCall, 1)) in SemaOpenCLBuiltinKernelWorkGroupSize()
1413 Expr *BlockArg = TheCall->getArg(0); in SemaOpenCLBuiltinKernelWorkGroupSize()
1416 << TheCall->getDirectCallee() << "block"; in SemaOpenCLBuiltinKernelWorkGroupSize()
1426 static bool checkOpenCLEnqueueLocalSizeArgs(Sema &S, CallExpr *TheCall, in checkOpenCLEnqueueLocalSizeArgs() argument
1430 IllegalParams |= checkOpenCLEnqueueIntType(S, TheCall->getArg(I), in checkOpenCLEnqueueLocalSizeArgs()
1437 static bool checkOpenCLEnqueueVariadicArgs(Sema &S, CallExpr *TheCall, in checkOpenCLEnqueueVariadicArgs() argument
1444 unsigned TotalNumArgs = TheCall->getNumArgs(); in checkOpenCLEnqueueVariadicArgs()
1449 S.Diag(TheCall->getBeginLoc(), in checkOpenCLEnqueueVariadicArgs()
1455 return checkOpenCLEnqueueLocalSizeArgs(S, TheCall, NumNonVarArgs, in checkOpenCLEnqueueVariadicArgs()
1485 static bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) { in SemaOpenCLBuiltinEnqueueKernel() argument
1486 unsigned NumArgs = TheCall->getNumArgs(); in SemaOpenCLBuiltinEnqueueKernel()
1489 S.Diag(TheCall->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
1495 Expr *Arg0 = TheCall->getArg(0); in SemaOpenCLBuiltinEnqueueKernel()
1496 Expr *Arg1 = TheCall->getArg(1); in SemaOpenCLBuiltinEnqueueKernel()
1497 Expr *Arg2 = TheCall->getArg(2); in SemaOpenCLBuiltinEnqueueKernel()
1498 Expr *Arg3 = TheCall->getArg(3); in SemaOpenCLBuiltinEnqueueKernel()
1502 S.Diag(TheCall->getArg(0)->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
1504 << TheCall->getDirectCallee() << S.Context.OCLQueueTy; in SemaOpenCLBuiltinEnqueueKernel()
1510 S.Diag(TheCall->getArg(1)->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
1512 << TheCall->getDirectCallee() << "'kernel_enqueue_flags_t' (i.e. uint)"; in SemaOpenCLBuiltinEnqueueKernel()
1518 S.Diag(TheCall->getArg(2)->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
1520 << TheCall->getDirectCallee() << "'ndrange_t'"; in SemaOpenCLBuiltinEnqueueKernel()
1530 << TheCall->getDirectCallee() << "block"; in SemaOpenCLBuiltinEnqueueKernel()
1546 checkOpenCLEnqueueVariadicArgs(S, TheCall, Arg3, 4)); in SemaOpenCLBuiltinEnqueueKernel()
1550 Expr *Arg6 = TheCall->getArg(6); in SemaOpenCLBuiltinEnqueueKernel()
1553 << TheCall->getDirectCallee() << "block"; in SemaOpenCLBuiltinEnqueueKernel()
1561 S.Diag(TheCall->getArg(3)->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
1563 << TheCall->getDirectCallee() << "integer"; in SemaOpenCLBuiltinEnqueueKernel()
1567 Expr *Arg4 = TheCall->getArg(4); in SemaOpenCLBuiltinEnqueueKernel()
1568 Expr *Arg5 = TheCall->getArg(5); in SemaOpenCLBuiltinEnqueueKernel()
1574 S.Diag(TheCall->getArg(4)->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
1576 << TheCall->getDirectCallee() in SemaOpenCLBuiltinEnqueueKernel()
1586 S.Diag(TheCall->getArg(5)->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
1588 << TheCall->getDirectCallee() in SemaOpenCLBuiltinEnqueueKernel()
1596 return checkOpenCLEnqueueVariadicArgs(S, TheCall, Arg6, 7); in SemaOpenCLBuiltinEnqueueKernel()
1600 S.Diag(TheCall->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
1851 static ExprResult SemaBuiltinLaunder(Sema &S, CallExpr *TheCall) { in SemaBuiltinLaunder() argument
1852 if (checkArgCount(S, TheCall, 1)) in SemaBuiltinLaunder()
1861 QualType ArgTy = TheCall->getArg(0)->getType(); in SemaBuiltinLaunder()
1870 TheCall->setType(ParamTy); in SemaBuiltinLaunder()
1882 S.Diag(TheCall->getBeginLoc(), diag::err_builtin_launder_invalid_arg) in SemaBuiltinLaunder()
1883 << DiagSelect.value() << TheCall->getSourceRange(); in SemaBuiltinLaunder()
1893 if (S.RequireCompleteType(TheCall->getBeginLoc(), ParamTy->getPointeeType(), in SemaBuiltinLaunder()
1903 S.PerformCopyInitialization(Entity, SourceLocation(), TheCall->getArg(0)); in SemaBuiltinLaunder()
1906 TheCall->setArg(0, Arg.get()); in SemaBuiltinLaunder()
1908 return TheCall; in SemaBuiltinLaunder()
1914 Sema &S, unsigned BuiltinID, CallExpr *TheCall, in CheckBuiltinTargetNotInUnsupported() argument
1919 S.Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) in CheckBuiltinTargetNotInUnsupported()
1920 << TheCall->getSourceRange(); in CheckBuiltinTargetNotInUnsupported()
1929 CheckBuiltinTargetInSupported(Sema &S, unsigned BuiltinID, CallExpr *TheCall, in CheckBuiltinTargetInSupported() argument
1935 S.Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) in CheckBuiltinTargetInSupported()
1936 << TheCall->getSourceRange(); in CheckBuiltinTargetInSupported()
1944 CallExpr *TheCall) { in CheckTSBuiltinFunctionCall() argument
1954 return CheckARMBuiltinFunctionCall(TI, BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1958 return CheckAArch64BuiltinFunctionCall(TI, BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1961 return CheckBPFBuiltinFunctionCall(BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1963 return CheckHexagonBuiltinFunctionCall(BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1968 return CheckMipsBuiltinFunctionCall(TI, BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1970 return CheckSystemZBuiltinFunctionCall(BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1973 return CheckX86BuiltinFunctionCall(TI, BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1978 return CheckPPCBuiltinFunctionCall(TI, BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1980 return CheckAMDGCNBuiltinFunctionCall(BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1983 return CheckRISCVBuiltinFunctionCall(TI, BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1989 CallExpr *TheCall) { in CheckBuiltinFunctionCall() argument
1990 ExprResult TheCallResult(TheCall); in CheckBuiltinFunctionCall()
2007 if (ArgNo < TheCall->getNumArgs() && in CheckBuiltinFunctionCall()
2008 SemaBuiltinConstantArg(TheCall, ArgNo, Result)) in CheckBuiltinFunctionCall()
2018 *this, BuiltinID, TheCall, in CheckBuiltinFunctionCall()
2021 assert(TheCall->getNumArgs() == 1 && in CheckBuiltinFunctionCall()
2023 if (CheckObjCString(TheCall->getArg(0))) in CheckBuiltinFunctionCall()
2029 if (SemaBuiltinVAStart(BuiltinID, TheCall)) in CheckBuiltinFunctionCall()
2037 if (SemaBuiltinVAStartARMMicrosoft(TheCall)) in CheckBuiltinFunctionCall()
2041 if (SemaBuiltinVAStart(BuiltinID, TheCall)) in CheckBuiltinFunctionCall()
2056 *this, BuiltinID, TheCall, in CheckBuiltinFunctionCall()
2068 if (CheckBuiltinTargetInSupported(*this, BuiltinID, TheCall, in CheckBuiltinFunctionCall()
2081 if (SemaBuiltinUnorderedCompare(TheCall)) in CheckBuiltinFunctionCall()
2085 if (SemaBuiltinFPClassification(TheCall, 6)) in CheckBuiltinFunctionCall()
2096 if (SemaBuiltinFPClassification(TheCall, 1)) in CheckBuiltinFunctionCall()
2100 return SemaBuiltinShuffleVector(TheCall); in CheckBuiltinFunctionCall()
2104 if (SemaBuiltinPrefetch(TheCall)) in CheckBuiltinFunctionCall()
2109 if (SemaBuiltinAllocaWithAlign(TheCall)) in CheckBuiltinFunctionCall()
2114 Diag(TheCall->getBeginLoc(), diag::warn_alloca) in CheckBuiltinFunctionCall()
2115 << TheCall->getDirectCallee(); in CheckBuiltinFunctionCall()
2118 if (SemaBuiltinArithmeticFence(TheCall)) in CheckBuiltinFunctionCall()
2123 if (SemaBuiltinAssume(TheCall)) in CheckBuiltinFunctionCall()
2127 if (SemaBuiltinAssumeAligned(TheCall)) in CheckBuiltinFunctionCall()
2132 if (SemaBuiltinConstantArgRange(TheCall, 1, 0, 3)) in CheckBuiltinFunctionCall()
2136 if (SemaBuiltinLongjmp(TheCall)) in CheckBuiltinFunctionCall()
2140 if (SemaBuiltinSetjmp(TheCall)) in CheckBuiltinFunctionCall()
2144 if (checkArgCount(*this, TheCall, 1)) return true; in CheckBuiltinFunctionCall()
2145 TheCall->setType(Context.IntTy); in CheckBuiltinFunctionCall()
2148 if (SemaBuiltinComplex(TheCall)) in CheckBuiltinFunctionCall()
2152 if (checkArgCount(*this, TheCall, 1)) return true; in CheckBuiltinFunctionCall()
2153 ExprResult Arg = DefaultFunctionArrayLvalueConversion(TheCall->getArg(0)); in CheckBuiltinFunctionCall()
2155 TheCall->setArg(0, Arg.get()); in CheckBuiltinFunctionCall()
2156 TheCall->setType(Context.IntTy); in CheckBuiltinFunctionCall()
2160 return SemaBuiltinLaunder(*this, TheCall); in CheckBuiltinFunctionCall()
2265 Diag(TheCall->getBeginLoc(), diag::warn_atomic_implicit_seq_cst) in CheckBuiltinFunctionCall()
2266 << TheCall->getCallee()->getSourceRange(); in CheckBuiltinFunctionCall()
2272 clang::Expr *SizeOp = TheCall->getArg(2); in CheckBuiltinFunctionCall()
2279 CheckNonNullArgument(*this, TheCall->getArg(0), TheCall->getExprLoc()); in CheckBuiltinFunctionCall()
2280 CheckNonNullArgument(*this, TheCall->getArg(1), TheCall->getExprLoc()); in CheckBuiltinFunctionCall()
2285 clang::Expr *SizeOp = TheCall->getArg(2); in CheckBuiltinFunctionCall()
2292 CheckNonNullArgument(*this, TheCall->getArg(0), TheCall->getExprLoc()); in CheckBuiltinFunctionCall()
2301 if (SemaBuiltinMSVCAnnotation(*this, TheCall)) in CheckBuiltinFunctionCall()
2305 if (SemaBuiltinAnnotation(*this, TheCall)) in CheckBuiltinFunctionCall()
2309 if (SemaBuiltinAddressof(*this, TheCall)) in CheckBuiltinFunctionCall()
2313 if (SemaBuiltinFunctionStart(*this, TheCall)) in CheckBuiltinFunctionCall()
2319 if (SemaBuiltinAlignment(*this, TheCall, BuiltinID)) in CheckBuiltinFunctionCall()
2325 if (SemaBuiltinOverflow(*this, TheCall, BuiltinID)) in CheckBuiltinFunctionCall()
2338 return SemaBuiltinDumpStruct(*this, TheCall); in CheckBuiltinFunctionCall()
2341 if (checkArgCount(*this, TheCall, 3)) in CheckBuiltinFunctionCall()
2344 const Expr *ProbArg = TheCall->getArg(2); in CheckBuiltinFunctionCall()
2369 if (SemaBuiltinPreserveAI(*this, TheCall)) in CheckBuiltinFunctionCall()
2373 if (SemaBuiltinCallWithStaticChain(*this, TheCall)) in CheckBuiltinFunctionCall()
2378 if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHExceptScope, in CheckBuiltinFunctionCall()
2384 if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHFilterScope, in CheckBuiltinFunctionCall()
2389 if (checkArgCount(*this, TheCall, 1)) in CheckBuiltinFunctionCall()
2393 TheCall->getBeginLoc(), in CheckBuiltinFunctionCall()
2395 TheCall)) in CheckBuiltinFunctionCall()
2398 TheCall->setType(Context.VoidPtrTy); in CheckBuiltinFunctionCall()
2409 if (checkArgCount(*this, TheCall, 1)) in CheckBuiltinFunctionCall()
2420 Diag(TheCall->getBeginLoc(), diag::err_builtin_move_forward_unsupported) in CheckBuiltinFunctionCall()
2431 if (SemaBuiltinRWPipe(*this, TheCall)) in CheckBuiltinFunctionCall()
2438 if (SemaBuiltinReserveRWPipe(*this, TheCall)) in CheckBuiltinFunctionCall()
2443 if (checkOpenCLSubgroupExt(*this, TheCall) || in CheckBuiltinFunctionCall()
2444 SemaBuiltinReserveRWPipe(*this, TheCall)) in CheckBuiltinFunctionCall()
2451 if (SemaBuiltinCommitRWPipe(*this, TheCall)) in CheckBuiltinFunctionCall()
2456 if (checkOpenCLSubgroupExt(*this, TheCall) || in CheckBuiltinFunctionCall()
2457 SemaBuiltinCommitRWPipe(*this, TheCall)) in CheckBuiltinFunctionCall()
2462 if (SemaBuiltinPipePackets(*this, TheCall)) in CheckBuiltinFunctionCall()
2468 if (SemaOpenCLBuiltinToAddr(*this, BuiltinID, TheCall)) in CheckBuiltinFunctionCall()
2473 if (SemaOpenCLBuiltinEnqueueKernel(*this, TheCall)) in CheckBuiltinFunctionCall()
2478 if (SemaOpenCLBuiltinKernelWorkGroupSize(*this, TheCall)) in CheckBuiltinFunctionCall()
2483 if (SemaOpenCLBuiltinNDRangeAndBlock(*this, TheCall)) in CheckBuiltinFunctionCall()
2490 if (SemaBuiltinOSLogFormat(TheCall)) in CheckBuiltinFunctionCall()
2495 if (SemaBuiltinConstantArgRange(TheCall, 0, 0, 0xFFFF)) in CheckBuiltinFunctionCall()
2501 if (!TheCall->getArg(0)->isValueDependent() && in CheckBuiltinFunctionCall()
2502 TheCall->getArg(0)->EvaluateAsInt(Result, getASTContext()) && in CheckBuiltinFunctionCall()
2504 Diag(TheCall->getBeginLoc(), diag::warn_frame_address) in CheckBuiltinFunctionCall()
2508 << TheCall->getSourceRange(); in CheckBuiltinFunctionCall()
2515 if (PrepareBuiltinElementwiseMathOneArgCall(TheCall)) in CheckBuiltinFunctionCall()
2518 QualType ArgTy = TheCall->getArg(0)->getType(); in CheckBuiltinFunctionCall()
2524 Diag(TheCall->getArg(0)->getBeginLoc(), in CheckBuiltinFunctionCall()
2538 if (PrepareBuiltinElementwiseMathOneArgCall(TheCall)) in CheckBuiltinFunctionCall()
2541 QualType ArgTy = TheCall->getArg(0)->getType(); in CheckBuiltinFunctionCall()
2547 Diag(TheCall->getArg(0)->getBeginLoc(), in CheckBuiltinFunctionCall()
2560 if (SemaBuiltinElementwiseMath(TheCall)) in CheckBuiltinFunctionCall()
2563 const Expr *Arg = TheCall->getArg(0); in CheckBuiltinFunctionCall()
2580 if (SemaBuiltinElementwiseMath(TheCall)) in CheckBuiltinFunctionCall()
2585 if (PrepareBuiltinReduceMathOneArgCall(TheCall)) in CheckBuiltinFunctionCall()
2588 const Expr *Arg = TheCall->getArg(0); in CheckBuiltinFunctionCall()
2596 TheCall->setType(TyA->getElementType()); in CheckBuiltinFunctionCall()
2607 if (PrepareBuiltinReduceMathOneArgCall(TheCall)) in CheckBuiltinFunctionCall()
2610 const Expr *Arg = TheCall->getArg(0); in CheckBuiltinFunctionCall()
2617 TheCall->setType(TyA->getElementType()); in CheckBuiltinFunctionCall()
2622 return SemaBuiltinMatrixTranspose(TheCall, TheCallResult); in CheckBuiltinFunctionCall()
2625 return SemaBuiltinMatrixColumnMajorLoad(TheCall, TheCallResult); in CheckBuiltinFunctionCall()
2628 return SemaBuiltinMatrixColumnMajorStore(TheCall, TheCallResult); in CheckBuiltinFunctionCall()
2631 auto Check = [](CallExpr *TheCall) { in CheckBuiltinFunctionCall() argument
2632 if (TheCall->getNumArgs() != 1) in CheckBuiltinFunctionCall()
2634 auto *DRE = dyn_cast<DeclRefExpr>(TheCall->getArg(0)->IgnoreImpCasts()); in CheckBuiltinFunctionCall()
2643 if (!Check(TheCall)) { in CheckBuiltinFunctionCall()
2644 Diag(TheCall->getBeginLoc(), in CheckBuiltinFunctionCall()
2660 Context.BuiltinInfo.getAuxBuiltinID(BuiltinID), TheCall)) in CheckBuiltinFunctionCall()
2664 TheCall)) in CheckBuiltinFunctionCall()
2747 bool Sema::CheckSVEBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { in CheckSVEBuiltinFunctionCall() argument
2772 Expr *Arg = TheCall->getArg(ArgNum); in CheckSVEBuiltinFunctionCall()
2778 if (SemaBuiltinConstantArg(TheCall, ArgNum, Imm)) in CheckSVEBuiltinFunctionCall()
2782 return Diag(TheCall->getBeginLoc(), ErrDiag) << Arg->getSourceRange(); in CheckSVEBuiltinFunctionCall()
2788 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 31)) in CheckSVEBuiltinFunctionCall()
2792 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 13)) in CheckSVEBuiltinFunctionCall()
2796 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 1, 16)) in CheckSVEBuiltinFunctionCall()
2800 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 7)) in CheckSVEBuiltinFunctionCall()
2804 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, in CheckSVEBuiltinFunctionCall()
2809 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 1, ElementSizeInBits)) in CheckSVEBuiltinFunctionCall()
2813 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 1, in CheckSVEBuiltinFunctionCall()
2818 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, in CheckSVEBuiltinFunctionCall()
2823 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, in CheckSVEBuiltinFunctionCall()
2828 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, in CheckSVEBuiltinFunctionCall()
2833 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, in CheckSVEBuiltinFunctionCall()
2851 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 1)) in CheckSVEBuiltinFunctionCall()
2855 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 2)) in CheckSVEBuiltinFunctionCall()
2859 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 3)) in CheckSVEBuiltinFunctionCall()
2869 unsigned BuiltinID, CallExpr *TheCall) { in CheckNeonBuiltinFunctionCall() argument
2884 unsigned ImmArg = TheCall->getNumArgs()-1; in CheckNeonBuiltinFunctionCall()
2886 if (SemaBuiltinConstantArg(TheCall, ImmArg, Result)) in CheckNeonBuiltinFunctionCall()
2891 return Diag(TheCall->getBeginLoc(), diag::err_invalid_neon_type_code) in CheckNeonBuiltinFunctionCall()
2892 << TheCall->getArg(ImmArg)->getSourceRange(); in CheckNeonBuiltinFunctionCall()
2897 Expr *Arg = TheCall->getArg(PtrArgNum); in CheckNeonBuiltinFunctionCall()
2934 return SemaBuiltinConstantArgRange(TheCall, i, l, u + l); in CheckNeonBuiltinFunctionCall()
2937 bool Sema::CheckMVEBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { in CheckMVEBuiltinFunctionCall() argument
2946 CallExpr *TheCall) { in CheckCDEBuiltinFunctionCall() argument
2957 return CheckARMCoprocessorImmediate(TI, TheCall->getArg(0), /*WantCDE*/ true); in CheckCDEBuiltinFunctionCall()
2983 bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, in CheckARMBuiltinExclusiveCall() argument
2999 DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts()); in CheckARMBuiltinExclusiveCall()
3002 if (checkArgCount(*this, TheCall, IsLdrex ? 1 : 2)) in CheckARMBuiltinExclusiveCall()
3009 Expr *PointerArg = TheCall->getArg(IsLdrex ? 0 : 1); in CheckARMBuiltinExclusiveCall()
3046 TheCall->setArg(IsLdrex ? 0 : 1, PointerArg); in CheckARMBuiltinExclusiveCall()
3079 TheCall->setType(ValType); in CheckARMBuiltinExclusiveCall()
3084 ExprResult ValArg = TheCall->getArg(0); in CheckARMBuiltinExclusiveCall()
3090 TheCall->setArg(0, ValArg.get()); in CheckARMBuiltinExclusiveCall()
3094 TheCall->setType(Context.IntTy); in CheckARMBuiltinExclusiveCall()
3099 CallExpr *TheCall) { in CheckARMBuiltinFunctionCall() argument
3104 return CheckARMBuiltinExclusiveCall(BuiltinID, TheCall, 64); in CheckARMBuiltinFunctionCall()
3108 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1) || in CheckARMBuiltinFunctionCall()
3109 SemaBuiltinConstantArgRange(TheCall, 2, 0, 1); in CheckARMBuiltinFunctionCall()
3114 return SemaBuiltinARMSpecialReg(BuiltinID, TheCall, 0, 3, false); in CheckARMBuiltinFunctionCall()
3120 return SemaBuiltinARMSpecialReg(BuiltinID, TheCall, 0, 5, true); in CheckARMBuiltinFunctionCall()
3122 if (CheckNeonBuiltinFunctionCall(TI, BuiltinID, TheCall)) in CheckARMBuiltinFunctionCall()
3124 if (CheckMVEBuiltinFunctionCall(BuiltinID, TheCall)) in CheckARMBuiltinFunctionCall()
3126 if (CheckCDEBuiltinFunctionCall(TI, BuiltinID, TheCall)) in CheckARMBuiltinFunctionCall()
3135 return SemaBuiltinConstantArgRange(TheCall, 1, 1, 32); in CheckARMBuiltinFunctionCall()
3137 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 31); in CheckARMBuiltinFunctionCall()
3139 return SemaBuiltinConstantArgRange(TheCall, 1, 1, 16); in CheckARMBuiltinFunctionCall()
3141 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 15); in CheckARMBuiltinFunctionCall()
3144 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1); in CheckARMBuiltinFunctionCall()
3149 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 15); in CheckARMBuiltinFunctionCall()
3168 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 15) || in CheckARMBuiltinFunctionCall()
3169 CheckARMCoprocessorImmediate(TI, TheCall->getArg(0), in CheckARMBuiltinFunctionCall()
3176 CallExpr *TheCall) { in CheckAArch64BuiltinFunctionCall() argument
3181 return CheckARMBuiltinExclusiveCall(BuiltinID, TheCall, 128); in CheckAArch64BuiltinFunctionCall()
3185 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1) || in CheckAArch64BuiltinFunctionCall()
3186 SemaBuiltinConstantArgRange(TheCall, 2, 0, 2) || in CheckAArch64BuiltinFunctionCall()
3187 SemaBuiltinConstantArgRange(TheCall, 3, 0, 1) || in CheckAArch64BuiltinFunctionCall()
3188 SemaBuiltinConstantArgRange(TheCall, 4, 0, 1); in CheckAArch64BuiltinFunctionCall()
3193 return SemaBuiltinARMSpecialReg(BuiltinID, TheCall, 0, 5, true); in CheckAArch64BuiltinFunctionCall()
3202 return SemaBuiltinARMMemoryTaggingCall(BuiltinID, TheCall); in CheckAArch64BuiltinFunctionCall()
3209 return SemaBuiltinARMSpecialReg(BuiltinID, TheCall, 0, 5, true); in CheckAArch64BuiltinFunctionCall()
3216 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 0x7fff); in CheckAArch64BuiltinFunctionCall()
3219 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 31); in CheckAArch64BuiltinFunctionCall()
3222 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 0xffff); in CheckAArch64BuiltinFunctionCall()
3224 if (CheckNeonBuiltinFunctionCall(TI, BuiltinID, TheCall)) in CheckAArch64BuiltinFunctionCall()
3227 if (CheckSVEBuiltinFunctionCall(BuiltinID, TheCall)) in CheckAArch64BuiltinFunctionCall()
3241 return SemaBuiltinConstantArgRange(TheCall, i, l, u + l); in CheckAArch64BuiltinFunctionCall()
3329 CallExpr *TheCall) { in CheckBPFBuiltinFunctionCall() argument
3336 if (checkArgCount(*this, TheCall, 2)) in CheckBPFBuiltinFunctionCall()
3340 Expr *Arg = TheCall->getArg(1); in CheckBPFBuiltinFunctionCall()
3357 Arg = TheCall->getArg(0); in CheckBPFBuiltinFunctionCall()
3386 TheCall->setType(Context.UnsignedIntTy); in CheckBPFBuiltinFunctionCall()
3388 TheCall->setType(Context.UnsignedLongTy); in CheckBPFBuiltinFunctionCall()
3392 bool Sema::CheckHexagonBuiltinArgument(unsigned BuiltinID, CallExpr *TheCall) { in CheckHexagonBuiltinArgument() argument
3615 Error |= SemaBuiltinConstantArgRange(TheCall, A.OpNum, Min, Max); in CheckHexagonBuiltinArgument()
3620 Error |= SemaBuiltinConstantArgRange(TheCall, A.OpNum, Min, Max); in CheckHexagonBuiltinArgument()
3621 Error |= SemaBuiltinConstantArgMultiple(TheCall, A.OpNum, M); in CheckHexagonBuiltinArgument()
3628 CallExpr *TheCall) { in CheckHexagonBuiltinFunctionCall() argument
3629 return CheckHexagonBuiltinArgument(BuiltinID, TheCall); in CheckHexagonBuiltinFunctionCall()
3633 unsigned BuiltinID, CallExpr *TheCall) { in CheckMipsBuiltinFunctionCall() argument
3634 return CheckMipsBuiltinCpu(TI, BuiltinID, TheCall) || in CheckMipsBuiltinFunctionCall()
3635 CheckMipsBuiltinArgument(BuiltinID, TheCall); in CheckMipsBuiltinFunctionCall()
3639 CallExpr *TheCall) { in CheckMipsBuiltinCpu() argument
3644 return Diag(TheCall->getBeginLoc(), diag::err_mips_builtin_requires_dsp); in CheckMipsBuiltinCpu()
3650 return Diag(TheCall->getBeginLoc(), in CheckMipsBuiltinCpu()
3657 return Diag(TheCall->getBeginLoc(), diag::err_mips_builtin_requires_msa); in CheckMipsBuiltinCpu()
3672 bool Sema::CheckMipsBuiltinArgument(unsigned BuiltinID, CallExpr *TheCall) { in CheckMipsBuiltinArgument() argument
3843 return SemaBuiltinConstantArgRange(TheCall, i, l, u); in CheckMipsBuiltinArgument()
3845 return SemaBuiltinConstantArgRange(TheCall, i, l, u) || in CheckMipsBuiltinArgument()
3846 SemaBuiltinConstantArgMultiple(TheCall, i, m); in CheckMipsBuiltinArgument()
3941 static bool SemaFeatureCheck(Sema &S, CallExpr *TheCall, in SemaFeatureCheck() argument
3948 S.Diag(TheCall->getBeginLoc(), DiagID) << TheCall->getSourceRange(); in SemaFeatureCheck()
3950 S.Diag(TheCall->getBeginLoc(), DiagID) in SemaFeatureCheck()
3951 << DiagArg << TheCall->getSourceRange(); in SemaFeatureCheck()
3960 bool Sema::SemaValueIsRunOfOnes(CallExpr *TheCall, unsigned ArgNum) { in SemaValueIsRunOfOnes() argument
3963 Expr *Arg = TheCall->getArg(ArgNum); in SemaValueIsRunOfOnes()
3968 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in SemaValueIsRunOfOnes()
3975 return Diag(TheCall->getBeginLoc(), in SemaValueIsRunOfOnes()
3981 CallExpr *TheCall) { in CheckPPCBuiltinFunctionCall() argument
3987 return Diag(TheCall->getBeginLoc(), diag::err_64_bit_builtin_32_bit_tgt) in CheckPPCBuiltinFunctionCall()
3988 << TheCall->getSourceRange(); in CheckPPCBuiltinFunctionCall()
3994 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1) || in CheckPPCBuiltinFunctionCall()
3995 SemaBuiltinConstantArgRange(TheCall, 2, 0, 15); in CheckPPCBuiltinFunctionCall()
3997 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 3); in CheckPPCBuiltinFunctionCall()
4000 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 1) || in CheckPPCBuiltinFunctionCall()
4001 SemaFeatureCheck(*this, TheCall, "htm", in CheckPPCBuiltinFunctionCall()
4004 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 7) || in CheckPPCBuiltinFunctionCall()
4005 SemaFeatureCheck(*this, TheCall, "htm", in CheckPPCBuiltinFunctionCall()
4009 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 31) || in CheckPPCBuiltinFunctionCall()
4010 SemaFeatureCheck(*this, TheCall, "htm", in CheckPPCBuiltinFunctionCall()
4014 return SemaFeatureCheck(*this, TheCall, "htm", in CheckPPCBuiltinFunctionCall()
4016 (SemaBuiltinConstantArgRange(TheCall, 0, 0, 31) || in CheckPPCBuiltinFunctionCall()
4017 SemaBuiltinConstantArgRange(TheCall, 2, 0, 31)); in CheckPPCBuiltinFunctionCall()
4034 return SemaFeatureCheck(*this, TheCall, "htm", in CheckPPCBuiltinFunctionCall()
4040 if (SemaBuiltinConstantArgRange(TheCall, 1, 0, 1)) in CheckPPCBuiltinFunctionCall()
4045 return Diag(TheCall->getBeginLoc(), diag::err_ppc_builtin_requires_abi) in CheckPPCBuiltinFunctionCall()
4052 return SemaBuiltinConstantArgRange(TheCall, 2, 0, 3); in CheckPPCBuiltinFunctionCall()
4055 return SemaBuiltinVSX(TheCall); in CheckPPCBuiltinFunctionCall()
4060 return SemaFeatureCheck(*this, TheCall, "extdiv", in CheckPPCBuiltinFunctionCall()
4063 return SemaFeatureCheck(*this, TheCall, "bpermd", in CheckPPCBuiltinFunctionCall()
4066 return SemaFeatureCheck(*this, TheCall, "vsx", in CheckPPCBuiltinFunctionCall()
4068 SemaBuiltinConstantArgRange(TheCall, 1, 0, 1); in CheckPPCBuiltinFunctionCall()
4070 return SemaFeatureCheck(*this, TheCall, "vsx", in CheckPPCBuiltinFunctionCall()
4074 return SemaFeatureCheck(*this, TheCall, "isa-v31-instructions", in CheckPPCBuiltinFunctionCall()
4077 return SemaBuiltinConstantArgRange(TheCall, 1, 2, 7); in CheckPPCBuiltinFunctionCall()
4079 return SemaBuiltinConstantArgRange(TheCall, 3, 0, 255); in CheckPPCBuiltinFunctionCall()
4081 return SemaBuiltinConstantArgRange(TheCall, 2, 0, 7); in CheckPPCBuiltinFunctionCall()
4083 return SemaBuiltinConstantArgRange(TheCall, 2, 0, 7); in CheckPPCBuiltinFunctionCall()
4085 return SemaBuiltinConstantArgRange(TheCall, 3, 0, 7); in CheckPPCBuiltinFunctionCall()
4088 return SemaBuiltinConstantArgRange(TheCall, 2, 1, 31); in CheckPPCBuiltinFunctionCall()
4094 return SemaFeatureCheck(*this, TheCall, "isa-v30-instructions", in CheckPPCBuiltinFunctionCall()
4097 return SemaFeatureCheck(*this, TheCall, "isa-v30-instructions", in CheckPPCBuiltinFunctionCall()
4099 SemaBuiltinConstantArgRange(TheCall, 0, 0, 1); in CheckPPCBuiltinFunctionCall()
4103 return SemaValueIsRunOfOnes(TheCall, 2); in CheckPPCBuiltinFunctionCall()
4106 return SemaBuiltinConstantArg(TheCall, 2, Result) || in CheckPPCBuiltinFunctionCall()
4107 SemaValueIsRunOfOnes(TheCall, 3); in CheckPPCBuiltinFunctionCall()
4111 return SemaFeatureCheck(*this, TheCall, "power9-vector", in CheckPPCBuiltinFunctionCall()
4114 if (SemaFeatureCheck(*this, TheCall, "isa-v30-instructions", in CheckPPCBuiltinFunctionCall()
4116 SemaBuiltinConstantArgRange(TheCall, 2, 0, 3)) in CheckPPCBuiltinFunctionCall()
4120 TheCall->getArg(2)->getIntegerConstantExpr(Context)->getSExtValue(); in CheckPPCBuiltinFunctionCall()
4122 Diag(TheCall->getBeginLoc(), diag::warn_argument_undefined_behaviour) in CheckPPCBuiltinFunctionCall()
4128 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 31); in CheckPPCBuiltinFunctionCall()
4130 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 255); in CheckPPCBuiltinFunctionCall()
4132 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 7) || in CheckPPCBuiltinFunctionCall()
4133 SemaBuiltinConstantArgRange(TheCall, 1, 0, 15); in CheckPPCBuiltinFunctionCall()
4135 return SemaBuiltinConstantArgPower2(TheCall, 0); in CheckPPCBuiltinFunctionCall()
4137 return SemaValueIsRunOfOnes(TheCall, 2); in CheckPPCBuiltinFunctionCall()
4143 return SemaFeatureCheck(*this, TheCall, "isa-v207-instructions", in CheckPPCBuiltinFunctionCall()
4147 return SemaFeatureCheck(*this, TheCall, "isa-v207-instructions", in CheckPPCBuiltinFunctionCall()
4149 SemaBuiltinConstantArgRange(TheCall, 1, 1, 16); in CheckPPCBuiltinFunctionCall()
4154 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1); in CheckPPCBuiltinFunctionCall()
4158 return SemaFeatureCheck(*this, TheCall, "isa-v30-instructions", in CheckPPCBuiltinFunctionCall()
4164 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 3); in CheckPPCBuiltinFunctionCall()
4169 return SemaFeatureCheck(*this, TheCall, "isa-v30-instructions", in CheckPPCBuiltinFunctionCall()
4171 SemaFeatureCheck(*this, TheCall, "vsx", in CheckPPCBuiltinFunctionCall()
4176 QualType ArgType = TheCall->getArg(0)->getType(); in CheckPPCBuiltinFunctionCall()
4179 return Diag(TheCall->getBeginLoc(), in CheckPPCBuiltinFunctionCall()
4181 return SemaFeatureCheck(*this, TheCall, "isa-v30-instructions", in CheckPPCBuiltinFunctionCall()
4183 SemaFeatureCheck(*this, TheCall, "vsx", in CheckPPCBuiltinFunctionCall()
4185 SemaBuiltinConstantArgRange(TheCall, 1, 0, 127); in CheckPPCBuiltinFunctionCall()
4196 return Diag(TheCall->getBeginLoc(), diag::err_target_unsupported_type) in CheckPPCBuiltinFunctionCall()
4207 for (unsigned I = 0, E = TheCall->getNumArgs(); I < E; ++I) in CheckPPCBuiltinFunctionCall()
4208 if (TheCall->getArg(I)->getType() != ArgType) in CheckPPCBuiltinFunctionCall()
4209 return Diag(TheCall->getBeginLoc(), in CheckPPCBuiltinFunctionCall()
4211 << TheCall->getArg(I)->getType() << ArgType << 1 << 0 << 0; in CheckPPCBuiltinFunctionCall()
4216 return SemaFeatureCheck(*this, TheCall, "isa-v206-instructions", in CheckPPCBuiltinFunctionCall()
4220 return SemaBuiltinPPCMMACall(TheCall, BuiltinID, Types); in CheckPPCBuiltinFunctionCall()
4223 return SemaBuiltinConstantArgRange(TheCall, i, l, u); in CheckPPCBuiltinFunctionCall()
4244 CallExpr *TheCall) { in CheckAMDGCNBuiltinFunctionCall() argument
4263 ExprResult Arg = TheCall->getArg(OrderIndex); in CheckAMDGCNBuiltinFunctionCall()
4293 Arg = TheCall->getArg(ScopeIndex); in CheckAMDGCNBuiltinFunctionCall()
4304 bool Sema::CheckRISCVLMUL(CallExpr *TheCall, unsigned ArgNum) { in CheckRISCVLMUL() argument
4308 Expr *Arg = TheCall->getArg(ArgNum); in CheckRISCVLMUL()
4313 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in CheckRISCVLMUL()
4320 return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_invalid_lmul) in CheckRISCVLMUL()
4347 CallExpr *TheCall) { in CheckRISCVBuiltinFunctionCall() argument
4358 return Diag(TheCall->getCallee()->getBeginLoc(), in CheckRISCVBuiltinFunctionCall()
4393 Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) in CheckRISCVBuiltinFunctionCall()
4394 << TheCall->getSourceRange() << StringRef(FeatureStrs); in CheckRISCVBuiltinFunctionCall()
4403 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 3) || in CheckRISCVBuiltinFunctionCall()
4404 CheckRISCVLMUL(TheCall, 2); in CheckRISCVBuiltinFunctionCall()
4406 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 3) || in CheckRISCVBuiltinFunctionCall()
4407 CheckRISCVLMUL(TheCall, 1); in CheckRISCVBuiltinFunctionCall()
4411 TheCall->getType().getCanonicalType().getTypePtr())); in CheckRISCVBuiltinFunctionCall()
4414 TheCall->getArg(0)->getType().getCanonicalType().getTypePtr())); in CheckRISCVBuiltinFunctionCall()
4418 return SemaBuiltinConstantArgRange(TheCall, 1, 0, MaxIndex - 1); in CheckRISCVBuiltinFunctionCall()
4423 TheCall->getType().getCanonicalType().getTypePtr())); in CheckRISCVBuiltinFunctionCall()
4426 TheCall->getArg(2)->getType().getCanonicalType().getTypePtr())); in CheckRISCVBuiltinFunctionCall()
4430 return SemaBuiltinConstantArgRange(TheCall, 1, 0, MaxIndex - 1); in CheckRISCVBuiltinFunctionCall()
4439 return SemaBuiltinConstantArgRange(TheCall, 2, 0, 3); in CheckRISCVBuiltinFunctionCall()
4442 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 10); in CheckRISCVBuiltinFunctionCall()
4449 CallExpr *TheCall) { in CheckSystemZBuiltinFunctionCall() argument
4451 Expr *Arg = TheCall->getArg(0); in CheckSystemZBuiltinFunctionCall()
4482 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 15) || in CheckSystemZBuiltinFunctionCall()
4483 SemaBuiltinConstantArgRange(TheCall, 2, 0, 15); in CheckSystemZBuiltinFunctionCall()
4514 return SemaBuiltinConstantArgRange(TheCall, i, l, u); in CheckSystemZBuiltinFunctionCall()
4521 CallExpr *TheCall) { in SemaBuiltinCpuSupports() argument
4522 Expr *Arg = TheCall->getArg(0); in SemaBuiltinCpuSupports()
4526 return S.Diag(TheCall->getBeginLoc(), diag::err_expr_not_string_literal) in SemaBuiltinCpuSupports()
4533 return S.Diag(TheCall->getBeginLoc(), diag::err_invalid_cpu_supports) in SemaBuiltinCpuSupports()
4541 static bool SemaBuiltinCpuIs(Sema &S, const TargetInfo &TI, CallExpr *TheCall) { in SemaBuiltinCpuIs() argument
4542 Expr *Arg = TheCall->getArg(0); in SemaBuiltinCpuIs()
4546 return S.Diag(TheCall->getBeginLoc(), diag::err_expr_not_string_literal) in SemaBuiltinCpuIs()
4553 return S.Diag(TheCall->getBeginLoc(), diag::err_invalid_cpu_is) in SemaBuiltinCpuIs()
4559 bool Sema::CheckX86BuiltinRoundingOrSAE(unsigned BuiltinID, CallExpr *TheCall) { in CheckX86BuiltinRoundingOrSAE() argument
4832 Expr *Arg = TheCall->getArg(ArgNum); in CheckX86BuiltinRoundingOrSAE()
4837 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in CheckX86BuiltinRoundingOrSAE()
4850 return Diag(TheCall->getBeginLoc(), diag::err_x86_builtin_invalid_rounding) in CheckX86BuiltinRoundingOrSAE()
4856 CallExpr *TheCall) { in CheckX86BuiltinGatherScatterScale() argument
4942 Expr *Arg = TheCall->getArg(ArgNum); in CheckX86BuiltinGatherScatterScale()
4947 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in CheckX86BuiltinGatherScatterScale()
4953 return Diag(TheCall->getBeginLoc(), diag::err_x86_builtin_invalid_scale) in CheckX86BuiltinGatherScatterScale()
4959 bool Sema::CheckX86BuiltinTileArgumentsRange(CallExpr *TheCall, in CheckX86BuiltinTileArgumentsRange() argument
4962 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, TileRegLow, TileRegHigh)) in CheckX86BuiltinTileArgumentsRange()
4968 bool Sema::CheckX86BuiltinTileDuplicate(CallExpr *TheCall, in CheckX86BuiltinTileDuplicate() argument
4974 Expr *Arg = TheCall->getArg(ArgNum); in CheckX86BuiltinTileDuplicate()
4979 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in CheckX86BuiltinTileDuplicate()
4985 return Diag(TheCall->getBeginLoc(), in CheckX86BuiltinTileDuplicate()
4987 << TheCall->getArg(ArgNum)->getSourceRange(); in CheckX86BuiltinTileDuplicate()
4993 bool Sema::CheckX86BuiltinTileRangeAndDuplicate(CallExpr *TheCall, in CheckX86BuiltinTileRangeAndDuplicate() argument
4995 return CheckX86BuiltinTileArgumentsRange(TheCall, ArgNums) || in CheckX86BuiltinTileRangeAndDuplicate()
4996 CheckX86BuiltinTileDuplicate(TheCall, ArgNums); in CheckX86BuiltinTileRangeAndDuplicate()
4999 bool Sema::CheckX86BuiltinTileArguments(unsigned BuiltinID, CallExpr *TheCall) { in CheckX86BuiltinTileArguments() argument
5007 return CheckX86BuiltinTileArgumentsRange(TheCall, 0); in CheckX86BuiltinTileArguments()
5013 return CheckX86BuiltinTileRangeAndDuplicate(TheCall, {0, 1, 2}); in CheckX86BuiltinTileArguments()
5028 CallExpr *TheCall) { in CheckX86BuiltinFunctionCall() argument
5030 return SemaBuiltinCpuSupports(*this, TI, TheCall); in CheckX86BuiltinFunctionCall()
5033 return SemaBuiltinCpuIs(*this, TI, TheCall); in CheckX86BuiltinFunctionCall()
5038 return Diag(TheCall->getCallee()->getBeginLoc(), in CheckX86BuiltinFunctionCall()
5042 if (CheckX86BuiltinRoundingOrSAE(BuiltinID, TheCall)) in CheckX86BuiltinFunctionCall()
5046 if (CheckX86BuiltinGatherScatterScale(BuiltinID, TheCall)) in CheckX86BuiltinFunctionCall()
5050 if (CheckX86BuiltinTileArguments(BuiltinID, TheCall)) in CheckX86BuiltinFunctionCall()
5403 return SemaBuiltinConstantArgRange(TheCall, i, l, u, /*RangeIsError*/ false); in CheckX86BuiltinFunctionCall()
5828 bool Sema::CheckFunctionCall(FunctionDecl *FDecl, CallExpr *TheCall, in CheckFunctionCall() argument
5830 bool IsMemberOperatorCall = isa<CXXOperatorCallExpr>(TheCall) && in CheckFunctionCall()
5832 bool IsMemberFunction = isa<CXXMemberCallExpr>(TheCall) || in CheckFunctionCall()
5835 TheCall->getCallee()); in CheckFunctionCall()
5836 Expr** Args = TheCall->getArgs(); in CheckFunctionCall()
5837 unsigned NumArgs = TheCall->getNumArgs(); in CheckFunctionCall()
5849 cast<CXXMemberCallExpr>(TheCall)->getImplicitObjectArgument(); in CheckFunctionCall()
5863 CheckArgAlignment(TheCall->getRParenLoc(), FDecl, "'this'", ThisType, in CheckFunctionCall()
5868 IsMemberFunction, TheCall->getRParenLoc(), in CheckFunctionCall()
5869 TheCall->getCallee()->getSourceRange(), CallType); in CheckFunctionCall()
5879 CheckTCBEnforcement(TheCall->getExprLoc(), FDecl); in CheckFunctionCall()
5881 CheckAbsoluteValueFunction(TheCall, FDecl); in CheckFunctionCall()
5882 CheckMaxUnsignedZero(TheCall, FDecl); in CheckFunctionCall()
5895 CheckStrlcpycatArguments(TheCall, FnInfo); in CheckFunctionCall()
5898 CheckStrncatArguments(TheCall, FnInfo); in CheckFunctionCall()
5901 CheckFreeArguments(TheCall); in CheckFunctionCall()
5904 CheckMemaccessArguments(TheCall, CMId, FnInfo); in CheckFunctionCall()
5924 bool Sema::CheckPointerCall(NamedDecl *NDecl, CallExpr *TheCall, in CheckPointerCall() argument
5948 llvm::makeArrayRef(TheCall->getArgs(), TheCall->getNumArgs()), in CheckPointerCall()
5949 /*IsMemberFunction=*/false, TheCall->getRParenLoc(), in CheckPointerCall()
5950 TheCall->getCallee()->getSourceRange(), CallType); in CheckPointerCall()
5957 bool Sema::CheckOtherCall(CallExpr *TheCall, const FunctionProtoType *Proto) { in CheckOtherCall() argument
5959 TheCall->getCallee()); in CheckOtherCall()
5961 llvm::makeArrayRef(TheCall->getArgs(), TheCall->getNumArgs()), in CheckOtherCall()
5962 /*IsMemberFunction=*/false, TheCall->getRParenLoc(), in CheckOtherCall()
5963 TheCall->getCallee()->getSourceRange(), CallType); in CheckOtherCall()
6002 CallExpr *TheCall = cast<CallExpr>(TheCallResult.get()); in SemaAtomicOpsOverloaded() local
6003 DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts()); in SemaAtomicOpsOverloaded()
6004 MultiExprArg Args{TheCall->getArgs(), TheCall->getNumArgs()}; in SemaAtomicOpsOverloaded()
6005 return BuildAtomicExpr({TheCall->getBeginLoc(), TheCall->getEndLoc()}, in SemaAtomicOpsOverloaded()
6006 DRE->getSourceRange(), TheCall->getRParenLoc(), Args, in SemaAtomicOpsOverloaded()
6543 CallExpr *TheCall = static_cast<CallExpr *>(TheCallResult.get()); in SemaBuiltinAtomicOverloaded() local
6544 Expr *Callee = TheCall->getCallee(); in SemaBuiltinAtomicOverloaded()
6549 if (TheCall->getNumArgs() < 1) { in SemaBuiltinAtomicOverloaded()
6550 Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) in SemaBuiltinAtomicOverloaded()
6551 << 0 << 1 << TheCall->getNumArgs() << Callee->getSourceRange(); in SemaBuiltinAtomicOverloaded()
6560 Expr *FirstArg = TheCall->getArg(0); in SemaBuiltinAtomicOverloaded()
6565 TheCall->setArg(0, FirstArg); in SemaBuiltinAtomicOverloaded()
6825 if (TheCall->getNumArgs() < 1+NumFixed) { in SemaBuiltinAtomicOverloaded()
6826 Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) in SemaBuiltinAtomicOverloaded()
6827 << 0 << 1 + NumFixed << TheCall->getNumArgs() in SemaBuiltinAtomicOverloaded()
6832 Diag(TheCall->getEndLoc(), diag::warn_atomic_implicit_seq_cst) in SemaBuiltinAtomicOverloaded()
6836 Diag(TheCall->getEndLoc(), diag::warn_sync_fetch_and_nand_semantics_change) in SemaBuiltinAtomicOverloaded()
6862 ExprResult Arg = TheCall->getArg(i+1); in SemaBuiltinAtomicOverloaded()
6879 TheCall->setArg(i+1, Arg.get()); in SemaBuiltinAtomicOverloaded()
6893 TheCall->setCallee(PromotedCall.get()); in SemaBuiltinAtomicOverloaded()
6898 TheCall->setType(ResultType); in SemaBuiltinAtomicOverloaded()
6919 CallExpr *TheCall = (CallExpr *)TheCallResult.get(); in SemaBuiltinNontemporalOverloaded() local
6921 cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts()); in SemaBuiltinNontemporalOverloaded()
6931 if (checkArgCount(*this, TheCall, numArgs)) in SemaBuiltinNontemporalOverloaded()
6938 Expr *PointerArg = TheCall->getArg(numArgs - 1); in SemaBuiltinNontemporalOverloaded()
6945 TheCall->setArg(numArgs - 1, PointerArg); in SemaBuiltinNontemporalOverloaded()
6968 TheCall->setType(ValType); in SemaBuiltinNontemporalOverloaded()
6972 ExprResult ValArg = TheCall->getArg(0); in SemaBuiltinNontemporalOverloaded()
6979 TheCall->setArg(0, ValArg.get()); in SemaBuiltinNontemporalOverloaded()
6980 TheCall->setType(Context.VoidTy); in SemaBuiltinNontemporalOverloaded()
7119 bool Sema::SemaBuiltinVAStart(unsigned BuiltinID, CallExpr *TheCall) { in SemaBuiltinVAStart() argument
7120 Expr *Fn = TheCall->getCallee(); in SemaBuiltinVAStart()
7125 if (checkArgCount(*this, TheCall, 2)) in SemaBuiltinVAStart()
7129 if (checkBuiltinArgument(*this, TheCall, 0)) in SemaBuiltinVAStart()
7140 const Expr *Arg = TheCall->getArg(1)->IgnoreParenCasts(); in SemaBuiltinVAStart()
7160 Diag(TheCall->getArg(1)->getBeginLoc(), in SemaBuiltinVAStart()
7181 TheCall->setType(Context.VoidTy); in SemaBuiltinVAStart()
7249 bool Sema::SemaBuiltinUnorderedCompare(CallExpr *TheCall) { in SemaBuiltinUnorderedCompare() argument
7250 if (checkArgCount(*this, TheCall, 2)) in SemaBuiltinUnorderedCompare()
7253 ExprResult OrigArg0 = TheCall->getArg(0); in SemaBuiltinUnorderedCompare()
7254 ExprResult OrigArg1 = TheCall->getArg(1); in SemaBuiltinUnorderedCompare()
7259 OrigArg0, OrigArg1, TheCall->getExprLoc(), ACK_Comparison); in SemaBuiltinUnorderedCompare()
7266 TheCall->setArg(0, OrigArg0.get()); in SemaBuiltinUnorderedCompare()
7267 TheCall->setArg(1, OrigArg1.get()); in SemaBuiltinUnorderedCompare()
7288 bool Sema::SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs) { in SemaBuiltinFPClassification() argument
7289 if (checkArgCount(*this, TheCall, NumArgs)) in SemaBuiltinFPClassification()
7295 Expr *Arg = TheCall->getArg(i); in SemaBuiltinFPClassification()
7304 TheCall->setArg(i, Res.get()); in SemaBuiltinFPClassification()
7307 Expr *OrigArg = TheCall->getArg(NumArgs-1); in SemaBuiltinFPClassification()
7319 TheCall->setArg(NumArgs - 1, OrigArg); in SemaBuiltinFPClassification()
7331 bool Sema::SemaBuiltinComplex(CallExpr *TheCall) { in SemaBuiltinComplex() argument
7332 if (checkArgCount(*this, TheCall, 2)) in SemaBuiltinComplex()
7337 Expr *Arg = TheCall->getArg(I); in SemaBuiltinComplex()
7354 TheCall->setArg(I, Converted.get()); in SemaBuiltinComplex()
7358 TheCall->setType(Context.DependentTy); in SemaBuiltinComplex()
7362 Expr *Real = TheCall->getArg(0); in SemaBuiltinComplex()
7363 Expr *Imag = TheCall->getArg(1); in SemaBuiltinComplex()
7375 return Diag(TheCall->getBeginLoc(), diag::err_invalid_complex_spec) in SemaBuiltinComplex()
7378 return Diag(TheCall->getBeginLoc(), diag::err_invalid_complex_spec) in SemaBuiltinComplex()
7381 TheCall->setType(Context.getComplexType(Real->getType())); in SemaBuiltinComplex()
7392 bool Sema::SemaBuiltinVSX(CallExpr *TheCall) { in SemaBuiltinVSX() argument
7394 if (checkArgCount(*this, TheCall, ExpectedNumArgs)) in SemaBuiltinVSX()
7398 if (!TheCall->getArg(2)->isIntegerConstantExpr(Context)) in SemaBuiltinVSX()
7399 return Diag(TheCall->getBeginLoc(), in SemaBuiltinVSX()
7401 << 3 /* argument index */ << TheCall->getDirectCallee() in SemaBuiltinVSX()
7402 << SourceRange(TheCall->getArg(2)->getBeginLoc(), in SemaBuiltinVSX()
7403 TheCall->getArg(2)->getEndLoc()); in SemaBuiltinVSX()
7405 QualType Arg1Ty = TheCall->getArg(0)->getType(); in SemaBuiltinVSX()
7406 QualType Arg2Ty = TheCall->getArg(1)->getType(); in SemaBuiltinVSX()
7409 SourceLocation BuiltinLoc = TheCall->getBeginLoc(); in SemaBuiltinVSX()
7413 << TheCall->getDirectCallee() in SemaBuiltinVSX()
7414 << SourceRange(TheCall->getArg(0)->getBeginLoc(), in SemaBuiltinVSX()
7415 TheCall->getArg(1)->getEndLoc()); in SemaBuiltinVSX()
7421 << TheCall->getDirectCallee() in SemaBuiltinVSX()
7422 << SourceRange(TheCall->getArg(0)->getBeginLoc(), in SemaBuiltinVSX()
7423 TheCall->getArg(1)->getEndLoc()); in SemaBuiltinVSX()
7429 TheCall->setType(Arg1Ty); in SemaBuiltinVSX()
7436 ExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) { in SemaBuiltinShuffleVector() argument
7437 if (TheCall->getNumArgs() < 2) in SemaBuiltinShuffleVector()
7438 return ExprError(Diag(TheCall->getEndLoc(), in SemaBuiltinShuffleVector()
7440 << 0 /*function call*/ << 2 << TheCall->getNumArgs() in SemaBuiltinShuffleVector()
7441 << TheCall->getSourceRange()); in SemaBuiltinShuffleVector()
7446 QualType resType = TheCall->getArg(0)->getType(); in SemaBuiltinShuffleVector()
7449 if (!TheCall->getArg(0)->isTypeDependent() && in SemaBuiltinShuffleVector()
7450 !TheCall->getArg(1)->isTypeDependent()) { in SemaBuiltinShuffleVector()
7451 QualType LHSType = TheCall->getArg(0)->getType(); in SemaBuiltinShuffleVector()
7452 QualType RHSType = TheCall->getArg(1)->getType(); in SemaBuiltinShuffleVector()
7456 Diag(TheCall->getBeginLoc(), diag::err_vec_builtin_non_vector) in SemaBuiltinShuffleVector()
7457 << TheCall->getDirectCallee() in SemaBuiltinShuffleVector()
7458 << SourceRange(TheCall->getArg(0)->getBeginLoc(), in SemaBuiltinShuffleVector()
7459 TheCall->getArg(1)->getEndLoc())); in SemaBuiltinShuffleVector()
7462 unsigned numResElements = TheCall->getNumArgs() - 2; in SemaBuiltinShuffleVector()
7467 if (TheCall->getNumArgs() == 2) { in SemaBuiltinShuffleVector()
7470 return ExprError(Diag(TheCall->getBeginLoc(), in SemaBuiltinShuffleVector()
7472 << TheCall->getDirectCallee() in SemaBuiltinShuffleVector()
7473 << SourceRange(TheCall->getArg(1)->getBeginLoc(), in SemaBuiltinShuffleVector()
7474 TheCall->getArg(1)->getEndLoc())); in SemaBuiltinShuffleVector()
7476 return ExprError(Diag(TheCall->getBeginLoc(), in SemaBuiltinShuffleVector()
7478 << TheCall->getDirectCallee() in SemaBuiltinShuffleVector()
7479 << SourceRange(TheCall->getArg(0)->getBeginLoc(), in SemaBuiltinShuffleVector()
7480 TheCall->getArg(1)->getEndLoc())); in SemaBuiltinShuffleVector()
7488 for (unsigned i = 2; i < TheCall->getNumArgs(); i++) { in SemaBuiltinShuffleVector()
7489 if (TheCall->getArg(i)->isTypeDependent() || in SemaBuiltinShuffleVector()
7490 TheCall->getArg(i)->isValueDependent()) in SemaBuiltinShuffleVector()
7494 if (!(Result = TheCall->getArg(i)->getIntegerConstantExpr(Context))) in SemaBuiltinShuffleVector()
7495 return ExprError(Diag(TheCall->getBeginLoc(), in SemaBuiltinShuffleVector()
7497 << TheCall->getArg(i)->getSourceRange()); in SemaBuiltinShuffleVector()
7505 return ExprError(Diag(TheCall->getBeginLoc(), in SemaBuiltinShuffleVector()
7507 << TheCall->getArg(i)->getSourceRange()); in SemaBuiltinShuffleVector()
7512 for (unsigned i = 0, e = TheCall->getNumArgs(); i != e; i++) { in SemaBuiltinShuffleVector()
7513 exprs.push_back(TheCall->getArg(i)); in SemaBuiltinShuffleVector()
7514 TheCall->setArg(i, nullptr); in SemaBuiltinShuffleVector()
7518 TheCall->getCallee()->getBeginLoc(), in SemaBuiltinShuffleVector()
7519 TheCall->getRParenLoc()); in SemaBuiltinShuffleVector()
7555 bool Sema::SemaBuiltinPrefetch(CallExpr *TheCall) { in SemaBuiltinPrefetch() argument
7556 unsigned NumArgs = TheCall->getNumArgs(); in SemaBuiltinPrefetch()
7559 return Diag(TheCall->getEndLoc(), in SemaBuiltinPrefetch()
7561 << 0 /*function call*/ << 3 << NumArgs << TheCall->getSourceRange(); in SemaBuiltinPrefetch()
7566 if (SemaBuiltinConstantArgRange(TheCall, i, 0, i == 1 ? 1 : 3)) in SemaBuiltinPrefetch()
7573 bool Sema::SemaBuiltinArithmeticFence(CallExpr *TheCall) { in SemaBuiltinArithmeticFence() argument
7575 return Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) in SemaBuiltinArithmeticFence()
7576 << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc()); in SemaBuiltinArithmeticFence()
7577 if (checkArgCount(*this, TheCall, 1)) in SemaBuiltinArithmeticFence()
7579 Expr *Arg = TheCall->getArg(0); in SemaBuiltinArithmeticFence()
7585 return Diag(TheCall->getEndLoc(), diag::err_typecheck_expect_flt_or_vector) in SemaBuiltinArithmeticFence()
7589 TheCall->setArg(0, FirstArg.get()); in SemaBuiltinArithmeticFence()
7591 TheCall->setType(TheCall->getArg(0)->getType()); in SemaBuiltinArithmeticFence()
7598 bool Sema::SemaBuiltinAssume(CallExpr *TheCall) { in SemaBuiltinAssume() argument
7599 Expr *Arg = TheCall->getArg(0); in SemaBuiltinAssume()
7605 << cast<FunctionDecl>(TheCall->getCalleeDecl())->getIdentifier(); in SemaBuiltinAssume()
7613 bool Sema::SemaBuiltinAllocaWithAlign(CallExpr *TheCall) { in SemaBuiltinAllocaWithAlign() argument
7615 Expr *Arg = TheCall->getArg(1); in SemaBuiltinAllocaWithAlign()
7623 Diag(TheCall->getBeginLoc(), diag::warn_alloca_align_alignof) in SemaBuiltinAllocaWithAlign()
7629 return Diag(TheCall->getBeginLoc(), diag::err_alignment_not_power_of_two) in SemaBuiltinAllocaWithAlign()
7633 return Diag(TheCall->getBeginLoc(), diag::err_alignment_too_small) in SemaBuiltinAllocaWithAlign()
7637 return Diag(TheCall->getBeginLoc(), diag::err_alignment_too_big) in SemaBuiltinAllocaWithAlign()
7646 bool Sema::SemaBuiltinAssumeAligned(CallExpr *TheCall) { in SemaBuiltinAssumeAligned() argument
7647 unsigned NumArgs = TheCall->getNumArgs(); in SemaBuiltinAssumeAligned()
7650 return Diag(TheCall->getEndLoc(), in SemaBuiltinAssumeAligned()
7652 << 0 /*function call*/ << 3 << NumArgs << TheCall->getSourceRange(); in SemaBuiltinAssumeAligned()
7655 Expr *Arg = TheCall->getArg(1); in SemaBuiltinAssumeAligned()
7660 if (SemaBuiltinConstantArg(TheCall, 1, Result)) in SemaBuiltinAssumeAligned()
7664 return Diag(TheCall->getBeginLoc(), diag::err_alignment_not_power_of_two) in SemaBuiltinAssumeAligned()
7668 Diag(TheCall->getBeginLoc(), diag::warn_assume_aligned_too_great) in SemaBuiltinAssumeAligned()
7673 ExprResult Arg(TheCall->getArg(2)); in SemaBuiltinAssumeAligned()
7678 TheCall->setArg(2, Arg.get()); in SemaBuiltinAssumeAligned()
7684 bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) { in SemaBuiltinOSLogFormat() argument
7686 cast<FunctionDecl>(TheCall->getCalleeDecl())->getBuiltinID(); in SemaBuiltinOSLogFormat()
7689 unsigned NumArgs = TheCall->getNumArgs(); in SemaBuiltinOSLogFormat()
7692 return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args) in SemaBuiltinOSLogFormat()
7694 << TheCall->getSourceRange(); in SemaBuiltinOSLogFormat()
7697 return Diag(TheCall->getEndLoc(), in SemaBuiltinOSLogFormat()
7700 << TheCall->getSourceRange(); in SemaBuiltinOSLogFormat()
7706 ExprResult Arg(TheCall->getArg(i)); in SemaBuiltinOSLogFormat()
7712 TheCall->setArg(i, Arg.get()); in SemaBuiltinOSLogFormat()
7719 ExprResult Arg = CheckOSLogFormatStringArg(TheCall->getArg(i)); in SemaBuiltinOSLogFormat()
7722 TheCall->setArg(i, Arg.get()); in SemaBuiltinOSLogFormat()
7730 TheCall->getArg(i), VariadicFunction, nullptr); in SemaBuiltinOSLogFormat()
7737 << TheCall->getSourceRange(); in SemaBuiltinOSLogFormat()
7739 TheCall->setArg(i, Arg.get()); in SemaBuiltinOSLogFormat()
7747 ArrayRef<const Expr *> Args(TheCall->getArgs(), TheCall->getNumArgs()); in SemaBuiltinOSLogFormat()
7750 VariadicFunction, TheCall->getBeginLoc(), SourceRange(), in SemaBuiltinOSLogFormat()
7757 TheCall->setType(Context.getSizeType()); in SemaBuiltinOSLogFormat()
7759 TheCall->setType(Context.VoidPtrTy); in SemaBuiltinOSLogFormat()
7766 bool Sema::SemaBuiltinConstantArg(CallExpr *TheCall, int ArgNum, in SemaBuiltinConstantArg() argument
7768 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinConstantArg()
7769 DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts()); in SemaBuiltinConstantArg()
7776 return Diag(TheCall->getBeginLoc(), diag::err_constant_integer_arg_type) in SemaBuiltinConstantArg()
7784 bool Sema::SemaBuiltinConstantArgRange(CallExpr *TheCall, int ArgNum, in SemaBuiltinConstantArgRange() argument
7791 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinConstantArgRange()
7796 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in SemaBuiltinConstantArgRange()
7801 return Diag(TheCall->getBeginLoc(), diag::err_argument_invalid_range) in SemaBuiltinConstantArgRange()
7806 DiagRuntimeBehavior(TheCall->getBeginLoc(), TheCall, in SemaBuiltinConstantArgRange()
7817 bool Sema::SemaBuiltinConstantArgMultiple(CallExpr *TheCall, int ArgNum, in SemaBuiltinConstantArgMultiple() argument
7822 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinConstantArgMultiple()
7827 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in SemaBuiltinConstantArgMultiple()
7831 return Diag(TheCall->getBeginLoc(), diag::err_argument_not_multiple) in SemaBuiltinConstantArgMultiple()
7839 bool Sema::SemaBuiltinConstantArgPower2(CallExpr *TheCall, int ArgNum) { in SemaBuiltinConstantArgPower2() argument
7843 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinConstantArgPower2()
7848 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in SemaBuiltinConstantArgPower2()
7856 return Diag(TheCall->getBeginLoc(), diag::err_argument_not_power_of_2) in SemaBuiltinConstantArgPower2()
7885 bool Sema::SemaBuiltinConstantArgShiftedByte(CallExpr *TheCall, int ArgNum, in SemaBuiltinConstantArgShiftedByte() argument
7890 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinConstantArgShiftedByte()
7895 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in SemaBuiltinConstantArgShiftedByte()
7905 return Diag(TheCall->getBeginLoc(), diag::err_argument_not_shifted_byte) in SemaBuiltinConstantArgShiftedByte()
7914 bool Sema::SemaBuiltinConstantArgShiftedByteOrXXFF(CallExpr *TheCall, in SemaBuiltinConstantArgShiftedByteOrXXFF() argument
7920 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinConstantArgShiftedByteOrXXFF()
7925 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in SemaBuiltinConstantArgShiftedByteOrXXFF()
7937 return Diag(TheCall->getBeginLoc(), in SemaBuiltinConstantArgShiftedByteOrXXFF()
7943 bool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) { in SemaBuiltinARMMemoryTaggingCall() argument
7945 if (checkArgCount(*this, TheCall, 2)) in SemaBuiltinARMMemoryTaggingCall()
7947 Expr *Arg0 = TheCall->getArg(0); in SemaBuiltinARMMemoryTaggingCall()
7948 Expr *Arg1 = TheCall->getArg(1); in SemaBuiltinARMMemoryTaggingCall()
7955 return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) in SemaBuiltinARMMemoryTaggingCall()
7957 TheCall->setArg(0, FirstArg.get()); in SemaBuiltinARMMemoryTaggingCall()
7964 return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_integer) in SemaBuiltinARMMemoryTaggingCall()
7968 TheCall->setType(FirstArgType); in SemaBuiltinARMMemoryTaggingCall()
7973 if (checkArgCount(*this, TheCall, 2)) in SemaBuiltinARMMemoryTaggingCall()
7976 Expr *Arg0 = TheCall->getArg(0); in SemaBuiltinARMMemoryTaggingCall()
7982 return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) in SemaBuiltinARMMemoryTaggingCall()
7984 TheCall->setArg(0, FirstArg.get()); in SemaBuiltinARMMemoryTaggingCall()
7987 TheCall->setType(FirstArgType); in SemaBuiltinARMMemoryTaggingCall()
7990 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 15); in SemaBuiltinARMMemoryTaggingCall()
7994 if (checkArgCount(*this, TheCall, 2)) in SemaBuiltinARMMemoryTaggingCall()
7996 Expr *Arg0 = TheCall->getArg(0); in SemaBuiltinARMMemoryTaggingCall()
7997 Expr *Arg1 = TheCall->getArg(1); in SemaBuiltinARMMemoryTaggingCall()
8004 return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) in SemaBuiltinARMMemoryTaggingCall()
8009 return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_integer) in SemaBuiltinARMMemoryTaggingCall()
8011 TheCall->setType(Context.IntTy); in SemaBuiltinARMMemoryTaggingCall()
8017 if (checkArgCount(*this, TheCall, 1)) in SemaBuiltinARMMemoryTaggingCall()
8019 Expr *Arg0 = TheCall->getArg(0); in SemaBuiltinARMMemoryTaggingCall()
8026 return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) in SemaBuiltinARMMemoryTaggingCall()
8028 TheCall->setArg(0, FirstArg.get()); in SemaBuiltinARMMemoryTaggingCall()
8032 TheCall->setType(FirstArgType); in SemaBuiltinARMMemoryTaggingCall()
8037 Expr *ArgA = TheCall->getArg(0); in SemaBuiltinARMMemoryTaggingCall()
8038 Expr *ArgB = TheCall->getArg(1); in SemaBuiltinARMMemoryTaggingCall()
8055 return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_null_or_pointer) in SemaBuiltinARMMemoryTaggingCall()
8059 return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_null_or_pointer) in SemaBuiltinARMMemoryTaggingCall()
8070 return Diag(TheCall->getBeginLoc(), diag::err_typecheck_sub_ptr_compatible) in SemaBuiltinARMMemoryTaggingCall()
8078 return Diag(TheCall->getBeginLoc(), diag::err_memtag_any2arg_pointer) in SemaBuiltinARMMemoryTaggingCall()
8087 TheCall->setArg(0, ArgExprA.get()); in SemaBuiltinARMMemoryTaggingCall()
8088 TheCall->setArg(1, ArgExprB.get()); in SemaBuiltinARMMemoryTaggingCall()
8089 TheCall->setType(Context.LongLongTy); in SemaBuiltinARMMemoryTaggingCall()
8098 bool Sema::SemaBuiltinARMSpecialReg(unsigned BuiltinID, CallExpr *TheCall, in SemaBuiltinARMSpecialReg() argument
8116 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinARMSpecialReg()
8122 return Diag(TheCall->getBeginLoc(), diag::err_expr_not_string_literal) in SemaBuiltinARMSpecialReg()
8131 return Diag(TheCall->getBeginLoc(), diag::err_arm_invalid_specialreg) in SemaBuiltinARMSpecialReg()
8173 return Diag(TheCall->getBeginLoc(), diag::err_arm_invalid_specialreg) in SemaBuiltinARMSpecialReg()
8182 if (TheCall->getNumArgs() != 2) in SemaBuiltinARMSpecialReg()
8190 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 15); in SemaBuiltinARMSpecialReg()
8200 bool Sema::SemaBuiltinPPCMMACall(CallExpr *TheCall, unsigned BuiltinID, in SemaBuiltinPPCMMACall() argument
8213 if (SemaFeatureCheck(*this, TheCall, "paired-vector-memops", in SemaBuiltinPPCMMACall()
8215 SemaFeatureCheck(*this, TheCall, "mma", in SemaBuiltinPPCMMACall()
8223 if (SemaFeatureCheck(*this, TheCall, "paired-vector-memops", in SemaBuiltinPPCMMACall()
8235 TheCall->setType(type); in SemaBuiltinPPCMMACall()
8240 if (ArgNum >= TheCall->getNumArgs()) { in SemaBuiltinPPCMMACall()
8245 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinPPCMMACall()
8268 SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, Mask, true)) in SemaBuiltinPPCMMACall()
8282 if (checkArgCount(*this, TheCall, ArgNum)) in SemaBuiltinPPCMMACall()
8291 bool Sema::SemaBuiltinLongjmp(CallExpr *TheCall) { in SemaBuiltinLongjmp() argument
8293 return Diag(TheCall->getBeginLoc(), diag::err_builtin_longjmp_unsupported) in SemaBuiltinLongjmp()
8294 << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc()); in SemaBuiltinLongjmp()
8296 Expr *Arg = TheCall->getArg(1); in SemaBuiltinLongjmp()
8300 if (SemaBuiltinConstantArg(TheCall, 1, Result)) in SemaBuiltinLongjmp()
8304 return Diag(TheCall->getBeginLoc(), diag::err_builtin_longjmp_invalid_val) in SemaBuiltinLongjmp()
8312 bool Sema::SemaBuiltinSetjmp(CallExpr *TheCall) { in SemaBuiltinSetjmp() argument
8314 return Diag(TheCall->getBeginLoc(), diag::err_builtin_setjmp_unsupported) in SemaBuiltinSetjmp()
8315 << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc()); in SemaBuiltinSetjmp()
13313 static void CheckImplicitArgumentConversions(Sema &S, CallExpr *TheCall, in CheckImplicitArgumentConversions() argument
13315 unsigned NumArgs = TheCall->getNumArgs(); in CheckImplicitArgumentConversions()
13317 Expr *CurrA = TheCall->getArg(i); in CheckImplicitArgumentConversions()
13322 IsImplicitBoolFloatConversion(S, TheCall->getArg(i - 1), false)); in CheckImplicitArgumentConversions()
13324 IsImplicitBoolFloatConversion(S, TheCall->getArg(i + 1), false)); in CheckImplicitArgumentConversions()
17536 bool Sema::PrepareBuiltinElementwiseMathOneArgCall(CallExpr *TheCall) { in PrepareBuiltinElementwiseMathOneArgCall() argument
17537 if (checkArgCount(*this, TheCall, 1)) in PrepareBuiltinElementwiseMathOneArgCall()
17540 ExprResult A = UsualUnaryConversions(TheCall->getArg(0)); in PrepareBuiltinElementwiseMathOneArgCall()
17544 TheCall->setArg(0, A.get()); in PrepareBuiltinElementwiseMathOneArgCall()
17550 TheCall->setType(TyA); in PrepareBuiltinElementwiseMathOneArgCall()
17554 bool Sema::SemaBuiltinElementwiseMath(CallExpr *TheCall) { in SemaBuiltinElementwiseMath() argument
17555 if (checkArgCount(*this, TheCall, 2)) in SemaBuiltinElementwiseMath()
17558 ExprResult A = TheCall->getArg(0); in SemaBuiltinElementwiseMath()
17559 ExprResult B = TheCall->getArg(1); in SemaBuiltinElementwiseMath()
17563 UsualArithmeticConversions(A, B, TheCall->getExprLoc(), ACK_Comparison); in SemaBuiltinElementwiseMath()
17578 TheCall->setArg(0, A.get()); in SemaBuiltinElementwiseMath()
17579 TheCall->setArg(1, B.get()); in SemaBuiltinElementwiseMath()
17580 TheCall->setType(Res); in SemaBuiltinElementwiseMath()
17584 bool Sema::PrepareBuiltinReduceMathOneArgCall(CallExpr *TheCall) { in PrepareBuiltinReduceMathOneArgCall() argument
17585 if (checkArgCount(*this, TheCall, 1)) in PrepareBuiltinReduceMathOneArgCall()
17588 ExprResult A = UsualUnaryConversions(TheCall->getArg(0)); in PrepareBuiltinReduceMathOneArgCall()
17592 TheCall->setArg(0, A.get()); in PrepareBuiltinReduceMathOneArgCall()
17596 ExprResult Sema::SemaBuiltinMatrixTranspose(CallExpr *TheCall, in SemaBuiltinMatrixTranspose() argument
17598 if (checkArgCount(*this, TheCall, 1)) in SemaBuiltinMatrixTranspose()
17601 ExprResult MatrixArg = DefaultLvalueConversion(TheCall->getArg(0)); in SemaBuiltinMatrixTranspose()
17619 TheCall->setType(ResultType); in SemaBuiltinMatrixTranspose()
17622 TheCall->setArg(0, Matrix); in SemaBuiltinMatrixTranspose()
17646 ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, in SemaBuiltinMatrixColumnMajorLoad() argument
17649 Diag(TheCall->getBeginLoc(), diag::err_builtin_matrix_disabled); in SemaBuiltinMatrixColumnMajorLoad()
17653 if (checkArgCount(*this, TheCall, 4)) in SemaBuiltinMatrixColumnMajorLoad()
17657 Expr *PtrExpr = TheCall->getArg(PtrArgIdx); in SemaBuiltinMatrixColumnMajorLoad()
17658 Expr *RowsExpr = TheCall->getArg(1); in SemaBuiltinMatrixColumnMajorLoad()
17659 Expr *ColumnsExpr = TheCall->getArg(2); in SemaBuiltinMatrixColumnMajorLoad()
17660 Expr *StrideExpr = TheCall->getArg(3); in SemaBuiltinMatrixColumnMajorLoad()
17670 TheCall->setArg(0, PtrExpr); in SemaBuiltinMatrixColumnMajorLoad()
17672 TheCall->setType(Context.DependentTy); in SemaBuiltinMatrixColumnMajorLoad()
17673 return TheCall; in SemaBuiltinMatrixColumnMajorLoad()
17707 TheCall->setArg(1, RowsExpr); in SemaBuiltinMatrixColumnMajorLoad()
17714 TheCall->setArg(2, ColumnsExpr); in SemaBuiltinMatrixColumnMajorLoad()
17722 TheCall->setType(Context.DependentTy); in SemaBuiltinMatrixColumnMajorLoad()
17740 TheCall->setArg(3, StrideExpr); in SemaBuiltinMatrixColumnMajorLoad()
17757 TheCall->setType( in SemaBuiltinMatrixColumnMajorLoad()
17762 ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, in SemaBuiltinMatrixColumnMajorStore() argument
17764 if (checkArgCount(*this, TheCall, 3)) in SemaBuiltinMatrixColumnMajorStore()
17768 Expr *MatrixExpr = TheCall->getArg(0); in SemaBuiltinMatrixColumnMajorStore()
17769 Expr *PtrExpr = TheCall->getArg(PtrArgIdx); in SemaBuiltinMatrixColumnMajorStore()
17770 Expr *StrideExpr = TheCall->getArg(2); in SemaBuiltinMatrixColumnMajorStore()
17779 TheCall->setArg(0, MatrixExpr); in SemaBuiltinMatrixColumnMajorStore()
17782 TheCall->setType(Context.DependentTy); in SemaBuiltinMatrixColumnMajorStore()
17783 return TheCall; in SemaBuiltinMatrixColumnMajorStore()
17798 TheCall->setArg(1, PtrExpr); in SemaBuiltinMatrixColumnMajorStore()
17800 TheCall->setType(Context.DependentTy); in SemaBuiltinMatrixColumnMajorStore()
17801 return TheCall; in SemaBuiltinMatrixColumnMajorStore()
17838 TheCall->setArg(2, StrideExpr); in SemaBuiltinMatrixColumnMajorStore()