Lines Matching refs:TheCall

134 static bool SemaBuiltinAnnotation(Sema &S, CallExpr *TheCall) {  in SemaBuiltinAnnotation()  argument
135 if (checkArgCount(S, TheCall, 2)) in SemaBuiltinAnnotation()
139 Expr *ValArg = TheCall->getArg(0); in SemaBuiltinAnnotation()
148 Expr *StrArg = TheCall->getArg(1)->IgnoreParenCasts(); in SemaBuiltinAnnotation()
156 TheCall->setType(Ty); in SemaBuiltinAnnotation()
160 static bool SemaBuiltinMSVCAnnotation(Sema &S, CallExpr *TheCall) { in SemaBuiltinMSVCAnnotation() argument
162 if (TheCall->getNumArgs() < 1) { in SemaBuiltinMSVCAnnotation()
163 S.Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) in SemaBuiltinMSVCAnnotation()
164 << 0 << 1 << TheCall->getNumArgs() in SemaBuiltinMSVCAnnotation()
165 << TheCall->getCallee()->getSourceRange(); in SemaBuiltinMSVCAnnotation()
170 for (Expr *Arg : TheCall->arguments()) { in SemaBuiltinMSVCAnnotation()
184 static bool SemaBuiltinAddressof(Sema &S, CallExpr *TheCall) { in SemaBuiltinAddressof() argument
185 if (checkArgCount(S, TheCall, 1)) in SemaBuiltinAddressof()
188 ExprResult Arg(TheCall->getArg(0)); in SemaBuiltinAddressof()
189 QualType ResultType = S.CheckAddressOfOperand(Arg, TheCall->getBeginLoc()); in SemaBuiltinAddressof()
193 TheCall->setArg(0, Arg.get()); in SemaBuiltinAddressof()
194 TheCall->setType(ResultType); in SemaBuiltinAddressof()
200 static bool SemaBuiltinPreserveAI(Sema &S, CallExpr *TheCall) { in SemaBuiltinPreserveAI() argument
201 if (checkArgCount(S, TheCall, 1)) in SemaBuiltinPreserveAI()
204 TheCall->setType(TheCall->getArg(0)->getType()); in SemaBuiltinPreserveAI()
211 static bool SemaBuiltinAlignment(Sema &S, CallExpr *TheCall, unsigned ID) { in SemaBuiltinAlignment() argument
212 if (checkArgCount(S, TheCall, 2)) in SemaBuiltinAlignment()
215 clang::Expr *Source = TheCall->getArg(0); in SemaBuiltinAlignment()
235 clang::Expr *AlignOp = TheCall->getArg(1); in SemaBuiltinAlignment()
274 TheCall->setArg(0, SrcArg.get()); in SemaBuiltinAlignment()
281 TheCall->setArg(1, AlignArg.get()); in SemaBuiltinAlignment()
285 TheCall->setType(IsBooleanAlignBuiltin ? S.Context.BoolTy : SrcTy); in SemaBuiltinAlignment()
289 static bool SemaBuiltinOverflow(Sema &S, CallExpr *TheCall, in SemaBuiltinOverflow() argument
291 if (checkArgCount(S, TheCall, 3)) in SemaBuiltinOverflow()
296 ExprResult Arg = S.DefaultFunctionArrayLvalueConversion(TheCall->getArg(I)); in SemaBuiltinOverflow()
298 TheCall->setArg(I, Arg.get()); in SemaBuiltinOverflow()
312 ExprResult Arg = S.DefaultFunctionArrayLvalueConversion(TheCall->getArg(2)); in SemaBuiltinOverflow()
314 TheCall->setArg(2, Arg.get()); in SemaBuiltinOverflow()
332 const auto Arg = TheCall->getArg(I); in SemaBuiltinOverflow()
595 CallExpr *TheCall) { in checkFortifiedBuiltinMemoryFunction() argument
599 if (TheCall->isValueDependent() || TheCall->isTypeDependent() || in checkFortifiedBuiltinMemoryFunction()
620 auto *FormatExpr = TheCall->getArg(FormatIndex)->IgnoreParenImpCasts(); in checkFortifiedBuiltinMemoryFunction()
668 SizeIndex = TheCall->getNumArgs() - 2; in checkFortifiedBuiltinMemoryFunction()
669 ObjectIndex = TheCall->getNumArgs() - 1; in checkFortifiedBuiltinMemoryFunction()
694 SizeIndex = TheCall->getNumArgs() - 1; in checkFortifiedBuiltinMemoryFunction()
708 SizeIndex = TheCall->getNumArgs() - 1; in checkFortifiedBuiltinMemoryFunction()
728 Expr *SizeArg = TheCall->getArg(ObjectIndex); in checkFortifiedBuiltinMemoryFunction()
743 Expr *ObjArg = TheCall->getArg(ObjectIndex); in checkFortifiedBuiltinMemoryFunction()
754 Expr *UsedSizeArg = TheCall->getArg(SizeIndex); in checkFortifiedBuiltinMemoryFunction()
773 DiagRuntimeBehavior(TheCall->getBeginLoc(), TheCall, in checkFortifiedBuiltinMemoryFunction()
779 static bool SemaBuiltinSEHScopeCheck(Sema &SemaRef, CallExpr *TheCall, in SemaBuiltinSEHScopeCheck() argument
792 auto *DRE = cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts()); in SemaBuiltinSEHScopeCheck()
793 SemaRef.Diag(TheCall->getExprLoc(), DiagID) in SemaBuiltinSEHScopeCheck()
849 static bool SemaOpenCLBuiltinNDRangeAndBlock(Sema &S, CallExpr *TheCall) { in SemaOpenCLBuiltinNDRangeAndBlock() argument
850 if (checkArgCount(S, TheCall, 2)) in SemaOpenCLBuiltinNDRangeAndBlock()
853 if (checkOpenCLSubgroupExt(S, TheCall)) in SemaOpenCLBuiltinNDRangeAndBlock()
857 Expr *NDRangeArg = TheCall->getArg(0); in SemaOpenCLBuiltinNDRangeAndBlock()
860 << TheCall->getDirectCallee() << "'ndrange_t'"; in SemaOpenCLBuiltinNDRangeAndBlock()
864 Expr *BlockArg = TheCall->getArg(1); in SemaOpenCLBuiltinNDRangeAndBlock()
867 << TheCall->getDirectCallee() << "block"; in SemaOpenCLBuiltinNDRangeAndBlock()
876 static bool SemaOpenCLBuiltinKernelWorkGroupSize(Sema &S, CallExpr *TheCall) { in SemaOpenCLBuiltinKernelWorkGroupSize() argument
877 if (checkArgCount(S, TheCall, 1)) in SemaOpenCLBuiltinKernelWorkGroupSize()
880 Expr *BlockArg = TheCall->getArg(0); in SemaOpenCLBuiltinKernelWorkGroupSize()
883 << TheCall->getDirectCallee() << "block"; in SemaOpenCLBuiltinKernelWorkGroupSize()
893 static bool checkOpenCLEnqueueLocalSizeArgs(Sema &S, CallExpr *TheCall, in checkOpenCLEnqueueLocalSizeArgs() argument
897 IllegalParams |= checkOpenCLEnqueueIntType(S, TheCall->getArg(I), in checkOpenCLEnqueueLocalSizeArgs()
904 static bool checkOpenCLEnqueueVariadicArgs(Sema &S, CallExpr *TheCall, in checkOpenCLEnqueueVariadicArgs() argument
911 unsigned TotalNumArgs = TheCall->getNumArgs(); in checkOpenCLEnqueueVariadicArgs()
916 S.Diag(TheCall->getBeginLoc(), in checkOpenCLEnqueueVariadicArgs()
922 return checkOpenCLEnqueueLocalSizeArgs(S, TheCall, NumNonVarArgs, in checkOpenCLEnqueueVariadicArgs()
952 static bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) { in SemaOpenCLBuiltinEnqueueKernel() argument
953 unsigned NumArgs = TheCall->getNumArgs(); in SemaOpenCLBuiltinEnqueueKernel()
956 S.Diag(TheCall->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
962 Expr *Arg0 = TheCall->getArg(0); in SemaOpenCLBuiltinEnqueueKernel()
963 Expr *Arg1 = TheCall->getArg(1); in SemaOpenCLBuiltinEnqueueKernel()
964 Expr *Arg2 = TheCall->getArg(2); in SemaOpenCLBuiltinEnqueueKernel()
965 Expr *Arg3 = TheCall->getArg(3); in SemaOpenCLBuiltinEnqueueKernel()
969 S.Diag(TheCall->getArg(0)->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
971 << TheCall->getDirectCallee() << S.Context.OCLQueueTy; in SemaOpenCLBuiltinEnqueueKernel()
977 S.Diag(TheCall->getArg(1)->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
979 << TheCall->getDirectCallee() << "'kernel_enqueue_flags_t' (i.e. uint)"; in SemaOpenCLBuiltinEnqueueKernel()
985 S.Diag(TheCall->getArg(2)->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
987 << TheCall->getDirectCallee() << "'ndrange_t'"; in SemaOpenCLBuiltinEnqueueKernel()
997 << TheCall->getDirectCallee() << "block"; in SemaOpenCLBuiltinEnqueueKernel()
1013 checkOpenCLEnqueueVariadicArgs(S, TheCall, Arg3, 4)); in SemaOpenCLBuiltinEnqueueKernel()
1017 Expr *Arg6 = TheCall->getArg(6); in SemaOpenCLBuiltinEnqueueKernel()
1020 << TheCall->getDirectCallee() << "block"; in SemaOpenCLBuiltinEnqueueKernel()
1028 S.Diag(TheCall->getArg(3)->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
1030 << TheCall->getDirectCallee() << "integer"; in SemaOpenCLBuiltinEnqueueKernel()
1034 Expr *Arg4 = TheCall->getArg(4); in SemaOpenCLBuiltinEnqueueKernel()
1035 Expr *Arg5 = TheCall->getArg(5); in SemaOpenCLBuiltinEnqueueKernel()
1041 S.Diag(TheCall->getArg(4)->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
1043 << TheCall->getDirectCallee() in SemaOpenCLBuiltinEnqueueKernel()
1053 S.Diag(TheCall->getArg(5)->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
1055 << TheCall->getDirectCallee() in SemaOpenCLBuiltinEnqueueKernel()
1063 return checkOpenCLEnqueueVariadicArgs(S, TheCall, Arg6, 7); in SemaOpenCLBuiltinEnqueueKernel()
1067 S.Diag(TheCall->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
1318 static ExprResult SemaBuiltinLaunder(Sema &S, CallExpr *TheCall) { in SemaBuiltinLaunder() argument
1319 if (checkArgCount(S, TheCall, 1)) in SemaBuiltinLaunder()
1328 QualType ArgTy = TheCall->getArg(0)->getType(); in SemaBuiltinLaunder()
1337 TheCall->setType(ParamTy); in SemaBuiltinLaunder()
1349 S.Diag(TheCall->getBeginLoc(), diag::err_builtin_launder_invalid_arg) in SemaBuiltinLaunder()
1350 << DiagSelect.getValue() << TheCall->getSourceRange(); in SemaBuiltinLaunder()
1360 if (S.RequireCompleteType(TheCall->getBeginLoc(), ParamTy->getPointeeType(), in SemaBuiltinLaunder()
1370 S.PerformCopyInitialization(Entity, SourceLocation(), TheCall->getArg(0)); in SemaBuiltinLaunder()
1373 TheCall->setArg(0, Arg.get()); in SemaBuiltinLaunder()
1375 return TheCall; in SemaBuiltinLaunder()
1381 CheckBuiltinTargetSupport(Sema &S, unsigned BuiltinID, CallExpr *TheCall, in CheckBuiltinTargetSupport() argument
1387 S.Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) in CheckBuiltinTargetSupport()
1388 << TheCall->getSourceRange(); in CheckBuiltinTargetSupport()
1396 CallExpr *TheCall) { in CheckTSBuiltinFunctionCall() argument
1406 return CheckARMBuiltinFunctionCall(TI, BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1410 return CheckAArch64BuiltinFunctionCall(TI, BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1413 return CheckBPFBuiltinFunctionCall(BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1415 return CheckHexagonBuiltinFunctionCall(BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1420 return CheckMipsBuiltinFunctionCall(TI, BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1422 return CheckSystemZBuiltinFunctionCall(BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1425 return CheckX86BuiltinFunctionCall(TI, BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1430 return CheckPPCBuiltinFunctionCall(TI, BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1432 return CheckAMDGCNBuiltinFunctionCall(BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1435 return CheckRISCVBuiltinFunctionCall(TI, BuiltinID, TheCall); in CheckTSBuiltinFunctionCall()
1441 CallExpr *TheCall) { in CheckBuiltinFunctionCall() argument
1442 ExprResult TheCallResult(TheCall); in CheckBuiltinFunctionCall()
1457 if (SemaBuiltinConstantArg(TheCall, ArgNo, Result)) in CheckBuiltinFunctionCall()
1464 assert(TheCall->getNumArgs() == 1 && in CheckBuiltinFunctionCall()
1466 if (CheckObjCString(TheCall->getArg(0))) in CheckBuiltinFunctionCall()
1472 if (SemaBuiltinVAStart(BuiltinID, TheCall)) in CheckBuiltinFunctionCall()
1480 if (SemaBuiltinVAStartARMMicrosoft(TheCall)) in CheckBuiltinFunctionCall()
1484 if (SemaBuiltinVAStart(BuiltinID, TheCall)) in CheckBuiltinFunctionCall()
1499 *this, BuiltinID, TheCall, in CheckBuiltinFunctionCall()
1511 if (CheckBuiltinTargetSupport(*this, BuiltinID, TheCall, in CheckBuiltinFunctionCall()
1523 if (SemaBuiltinUnorderedCompare(TheCall)) in CheckBuiltinFunctionCall()
1527 if (SemaBuiltinFPClassification(TheCall, 6)) in CheckBuiltinFunctionCall()
1538 if (SemaBuiltinFPClassification(TheCall, 1)) in CheckBuiltinFunctionCall()
1542 return SemaBuiltinShuffleVector(TheCall); in CheckBuiltinFunctionCall()
1546 if (SemaBuiltinPrefetch(TheCall)) in CheckBuiltinFunctionCall()
1550 if (SemaBuiltinAllocaWithAlign(TheCall)) in CheckBuiltinFunctionCall()
1554 Diag(TheCall->getBeginLoc(), diag::warn_alloca) in CheckBuiltinFunctionCall()
1555 << TheCall->getDirectCallee(); in CheckBuiltinFunctionCall()
1558 if (SemaBuiltinArithmeticFence(TheCall)) in CheckBuiltinFunctionCall()
1563 if (SemaBuiltinAssume(TheCall)) in CheckBuiltinFunctionCall()
1567 if (SemaBuiltinAssumeAligned(TheCall)) in CheckBuiltinFunctionCall()
1572 if (SemaBuiltinConstantArgRange(TheCall, 1, 0, 3)) in CheckBuiltinFunctionCall()
1576 if (SemaBuiltinLongjmp(TheCall)) in CheckBuiltinFunctionCall()
1580 if (SemaBuiltinSetjmp(TheCall)) in CheckBuiltinFunctionCall()
1584 if (checkArgCount(*this, TheCall, 1)) return true; in CheckBuiltinFunctionCall()
1585 TheCall->setType(Context.IntTy); in CheckBuiltinFunctionCall()
1588 if (SemaBuiltinComplex(TheCall)) in CheckBuiltinFunctionCall()
1592 if (checkArgCount(*this, TheCall, 1)) return true; in CheckBuiltinFunctionCall()
1593 ExprResult Arg = DefaultFunctionArrayLvalueConversion(TheCall->getArg(0)); in CheckBuiltinFunctionCall()
1595 TheCall->setArg(0, Arg.get()); in CheckBuiltinFunctionCall()
1596 TheCall->setType(Context.IntTy); in CheckBuiltinFunctionCall()
1600 return SemaBuiltinLaunder(*this, TheCall); in CheckBuiltinFunctionCall()
1705 Diag(TheCall->getBeginLoc(), diag::warn_atomic_implicit_seq_cst) in CheckBuiltinFunctionCall()
1706 << TheCall->getCallee()->getSourceRange(); in CheckBuiltinFunctionCall()
1712 clang::Expr *SizeOp = TheCall->getArg(2); in CheckBuiltinFunctionCall()
1719 CheckNonNullArgument(*this, TheCall->getArg(0), TheCall->getExprLoc()); in CheckBuiltinFunctionCall()
1720 CheckNonNullArgument(*this, TheCall->getArg(1), TheCall->getExprLoc()); in CheckBuiltinFunctionCall()
1730 if (SemaBuiltinMSVCAnnotation(*this, TheCall)) in CheckBuiltinFunctionCall()
1734 if (SemaBuiltinAnnotation(*this, TheCall)) in CheckBuiltinFunctionCall()
1738 if (SemaBuiltinAddressof(*this, TheCall)) in CheckBuiltinFunctionCall()
1744 if (SemaBuiltinAlignment(*this, TheCall, BuiltinID)) in CheckBuiltinFunctionCall()
1750 if (SemaBuiltinOverflow(*this, TheCall, BuiltinID)) in CheckBuiltinFunctionCall()
1764 if (checkArgCount(*this, TheCall, 2)) in CheckBuiltinFunctionCall()
1767 const Expr *PtrArg = TheCall->getArg(0)->IgnoreParenImpCasts(); in CheckBuiltinFunctionCall()
1778 const Expr *FnPtrArg = TheCall->getArg(1)->IgnoreImpCasts(); in CheckBuiltinFunctionCall()
1815 TheCall->setType(Context.IntTy); in CheckBuiltinFunctionCall()
1820 if (checkArgCount(*this, TheCall, 3)) in CheckBuiltinFunctionCall()
1823 const Expr *ProbArg = TheCall->getArg(2); in CheckBuiltinFunctionCall()
1848 if (SemaBuiltinPreserveAI(*this, TheCall)) in CheckBuiltinFunctionCall()
1852 if (SemaBuiltinCallWithStaticChain(*this, TheCall)) in CheckBuiltinFunctionCall()
1857 if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHExceptScope, in CheckBuiltinFunctionCall()
1863 if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHFilterScope, in CheckBuiltinFunctionCall()
1868 if (checkArgCount(*this, TheCall, 1)) in CheckBuiltinFunctionCall()
1872 TheCall->getBeginLoc(), in CheckBuiltinFunctionCall()
1874 TheCall)) in CheckBuiltinFunctionCall()
1877 TheCall->setType(Context.VoidPtrTy); in CheckBuiltinFunctionCall()
1884 if (SemaBuiltinRWPipe(*this, TheCall)) in CheckBuiltinFunctionCall()
1891 if (SemaBuiltinReserveRWPipe(*this, TheCall)) in CheckBuiltinFunctionCall()
1896 if (checkOpenCLSubgroupExt(*this, TheCall) || in CheckBuiltinFunctionCall()
1897 SemaBuiltinReserveRWPipe(*this, TheCall)) in CheckBuiltinFunctionCall()
1904 if (SemaBuiltinCommitRWPipe(*this, TheCall)) in CheckBuiltinFunctionCall()
1909 if (checkOpenCLSubgroupExt(*this, TheCall) || in CheckBuiltinFunctionCall()
1910 SemaBuiltinCommitRWPipe(*this, TheCall)) in CheckBuiltinFunctionCall()
1915 if (SemaBuiltinPipePackets(*this, TheCall)) in CheckBuiltinFunctionCall()
1921 if (SemaOpenCLBuiltinToAddr(*this, BuiltinID, TheCall)) in CheckBuiltinFunctionCall()
1926 if (SemaOpenCLBuiltinEnqueueKernel(*this, TheCall)) in CheckBuiltinFunctionCall()
1931 if (SemaOpenCLBuiltinKernelWorkGroupSize(*this, TheCall)) in CheckBuiltinFunctionCall()
1936 if (SemaOpenCLBuiltinNDRangeAndBlock(*this, TheCall)) in CheckBuiltinFunctionCall()
1943 if (SemaBuiltinOSLogFormat(TheCall)) in CheckBuiltinFunctionCall()
1948 if (SemaBuiltinConstantArgRange(TheCall, 0, 0, 0xFFFF)) in CheckBuiltinFunctionCall()
1954 if (!TheCall->getArg(0)->isValueDependent() && in CheckBuiltinFunctionCall()
1955 TheCall->getArg(0)->EvaluateAsInt(Result, getASTContext()) && in CheckBuiltinFunctionCall()
1957 Diag(TheCall->getBeginLoc(), diag::warn_frame_address) in CheckBuiltinFunctionCall()
1961 << TheCall->getSourceRange(); in CheckBuiltinFunctionCall()
1966 return SemaBuiltinMatrixTranspose(TheCall, TheCallResult); in CheckBuiltinFunctionCall()
1969 return SemaBuiltinMatrixColumnMajorLoad(TheCall, TheCallResult); in CheckBuiltinFunctionCall()
1972 return SemaBuiltinMatrixColumnMajorStore(TheCall, TheCallResult); in CheckBuiltinFunctionCall()
1975 auto Check = [](CallExpr *TheCall) { in CheckBuiltinFunctionCall() argument
1976 if (TheCall->getNumArgs() != 1) in CheckBuiltinFunctionCall()
1978 auto *DRE = dyn_cast<DeclRefExpr>(TheCall->getArg(0)->IgnoreImpCasts()); in CheckBuiltinFunctionCall()
1987 if (!Check(TheCall)) { in CheckBuiltinFunctionCall()
1988 Diag(TheCall->getBeginLoc(), in CheckBuiltinFunctionCall()
2004 Context.BuiltinInfo.getAuxBuiltinID(BuiltinID), TheCall)) in CheckBuiltinFunctionCall()
2008 TheCall)) in CheckBuiltinFunctionCall()
2091 bool Sema::CheckSVEBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { in CheckSVEBuiltinFunctionCall() argument
2116 Expr *Arg = TheCall->getArg(ArgNum); in CheckSVEBuiltinFunctionCall()
2122 if (SemaBuiltinConstantArg(TheCall, ArgNum, Imm)) in CheckSVEBuiltinFunctionCall()
2126 return Diag(TheCall->getBeginLoc(), ErrDiag) << Arg->getSourceRange(); in CheckSVEBuiltinFunctionCall()
2132 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 31)) in CheckSVEBuiltinFunctionCall()
2136 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 13)) in CheckSVEBuiltinFunctionCall()
2140 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 1, 16)) in CheckSVEBuiltinFunctionCall()
2144 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 7)) in CheckSVEBuiltinFunctionCall()
2148 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, in CheckSVEBuiltinFunctionCall()
2153 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 1, ElementSizeInBits)) in CheckSVEBuiltinFunctionCall()
2157 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 1, in CheckSVEBuiltinFunctionCall()
2162 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, in CheckSVEBuiltinFunctionCall()
2167 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, in CheckSVEBuiltinFunctionCall()
2172 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, in CheckSVEBuiltinFunctionCall()
2177 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, in CheckSVEBuiltinFunctionCall()
2195 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 1)) in CheckSVEBuiltinFunctionCall()
2199 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 2)) in CheckSVEBuiltinFunctionCall()
2203 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, 3)) in CheckSVEBuiltinFunctionCall()
2213 unsigned BuiltinID, CallExpr *TheCall) { in CheckNeonBuiltinFunctionCall() argument
2228 unsigned ImmArg = TheCall->getNumArgs()-1; in CheckNeonBuiltinFunctionCall()
2230 if (SemaBuiltinConstantArg(TheCall, ImmArg, Result)) in CheckNeonBuiltinFunctionCall()
2235 return Diag(TheCall->getBeginLoc(), diag::err_invalid_neon_type_code) in CheckNeonBuiltinFunctionCall()
2236 << TheCall->getArg(ImmArg)->getSourceRange(); in CheckNeonBuiltinFunctionCall()
2241 Expr *Arg = TheCall->getArg(PtrArgNum); in CheckNeonBuiltinFunctionCall()
2278 return SemaBuiltinConstantArgRange(TheCall, i, l, u + l); in CheckNeonBuiltinFunctionCall()
2281 bool Sema::CheckMVEBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { in CheckMVEBuiltinFunctionCall() argument
2290 CallExpr *TheCall) { in CheckCDEBuiltinFunctionCall() argument
2301 return CheckARMCoprocessorImmediate(TI, TheCall->getArg(0), /*WantCDE*/ true); in CheckCDEBuiltinFunctionCall()
2327 bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, in CheckARMBuiltinExclusiveCall() argument
2343 DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts()); in CheckARMBuiltinExclusiveCall()
2346 if (checkArgCount(*this, TheCall, IsLdrex ? 1 : 2)) in CheckARMBuiltinExclusiveCall()
2353 Expr *PointerArg = TheCall->getArg(IsLdrex ? 0 : 1); in CheckARMBuiltinExclusiveCall()
2390 TheCall->setArg(IsLdrex ? 0 : 1, PointerArg); in CheckARMBuiltinExclusiveCall()
2423 TheCall->setType(ValType); in CheckARMBuiltinExclusiveCall()
2428 ExprResult ValArg = TheCall->getArg(0); in CheckARMBuiltinExclusiveCall()
2434 TheCall->setArg(0, ValArg.get()); in CheckARMBuiltinExclusiveCall()
2438 TheCall->setType(Context.IntTy); in CheckARMBuiltinExclusiveCall()
2443 CallExpr *TheCall) { in CheckARMBuiltinFunctionCall() argument
2448 return CheckARMBuiltinExclusiveCall(BuiltinID, TheCall, 64); in CheckARMBuiltinFunctionCall()
2452 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1) || in CheckARMBuiltinFunctionCall()
2453 SemaBuiltinConstantArgRange(TheCall, 2, 0, 1); in CheckARMBuiltinFunctionCall()
2458 return SemaBuiltinARMSpecialReg(BuiltinID, TheCall, 0, 3, false); in CheckARMBuiltinFunctionCall()
2464 return SemaBuiltinARMSpecialReg(BuiltinID, TheCall, 0, 5, true); in CheckARMBuiltinFunctionCall()
2466 if (CheckNeonBuiltinFunctionCall(TI, BuiltinID, TheCall)) in CheckARMBuiltinFunctionCall()
2468 if (CheckMVEBuiltinFunctionCall(BuiltinID, TheCall)) in CheckARMBuiltinFunctionCall()
2470 if (CheckCDEBuiltinFunctionCall(TI, BuiltinID, TheCall)) in CheckARMBuiltinFunctionCall()
2479 return SemaBuiltinConstantArgRange(TheCall, 1, 1, 32); in CheckARMBuiltinFunctionCall()
2481 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 31); in CheckARMBuiltinFunctionCall()
2483 return SemaBuiltinConstantArgRange(TheCall, 1, 1, 16); in CheckARMBuiltinFunctionCall()
2485 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 15); in CheckARMBuiltinFunctionCall()
2488 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1); in CheckARMBuiltinFunctionCall()
2493 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 15); in CheckARMBuiltinFunctionCall()
2512 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 15) || in CheckARMBuiltinFunctionCall()
2513 CheckARMCoprocessorImmediate(TI, TheCall->getArg(0), in CheckARMBuiltinFunctionCall()
2520 CallExpr *TheCall) { in CheckAArch64BuiltinFunctionCall() argument
2525 return CheckARMBuiltinExclusiveCall(BuiltinID, TheCall, 128); in CheckAArch64BuiltinFunctionCall()
2529 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1) || in CheckAArch64BuiltinFunctionCall()
2530 SemaBuiltinConstantArgRange(TheCall, 2, 0, 2) || in CheckAArch64BuiltinFunctionCall()
2531 SemaBuiltinConstantArgRange(TheCall, 3, 0, 1) || in CheckAArch64BuiltinFunctionCall()
2532 SemaBuiltinConstantArgRange(TheCall, 4, 0, 1); in CheckAArch64BuiltinFunctionCall()
2537 return SemaBuiltinARMSpecialReg(BuiltinID, TheCall, 0, 5, true); in CheckAArch64BuiltinFunctionCall()
2546 return SemaBuiltinARMMemoryTaggingCall(BuiltinID, TheCall); in CheckAArch64BuiltinFunctionCall()
2553 return SemaBuiltinARMSpecialReg(BuiltinID, TheCall, 0, 5, true); in CheckAArch64BuiltinFunctionCall()
2560 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 0x7fff); in CheckAArch64BuiltinFunctionCall()
2563 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 31); in CheckAArch64BuiltinFunctionCall()
2565 if (CheckNeonBuiltinFunctionCall(TI, BuiltinID, TheCall)) in CheckAArch64BuiltinFunctionCall()
2568 if (CheckSVEBuiltinFunctionCall(BuiltinID, TheCall)) in CheckAArch64BuiltinFunctionCall()
2582 return SemaBuiltinConstantArgRange(TheCall, i, l, u + l); in CheckAArch64BuiltinFunctionCall()
2686 CallExpr *TheCall) { in CheckBPFBuiltinFunctionCall() argument
2693 if (checkArgCount(*this, TheCall, 2)) in CheckBPFBuiltinFunctionCall()
2697 Expr *Arg = TheCall->getArg(1); in CheckBPFBuiltinFunctionCall()
2714 Arg = TheCall->getArg(0); in CheckBPFBuiltinFunctionCall()
2743 TheCall->setType(Context.UnsignedIntTy); in CheckBPFBuiltinFunctionCall()
2745 TheCall->setType(Context.UnsignedLongTy); in CheckBPFBuiltinFunctionCall()
2749 bool Sema::CheckHexagonBuiltinArgument(unsigned BuiltinID, CallExpr *TheCall) { in CheckHexagonBuiltinArgument() argument
2972 Error |= SemaBuiltinConstantArgRange(TheCall, A.OpNum, Min, Max); in CheckHexagonBuiltinArgument()
2977 Error |= SemaBuiltinConstantArgRange(TheCall, A.OpNum, Min, Max) | in CheckHexagonBuiltinArgument()
2978 SemaBuiltinConstantArgMultiple(TheCall, A.OpNum, M); in CheckHexagonBuiltinArgument()
2985 CallExpr *TheCall) { in CheckHexagonBuiltinFunctionCall() argument
2986 return CheckHexagonBuiltinArgument(BuiltinID, TheCall); in CheckHexagonBuiltinFunctionCall()
2990 unsigned BuiltinID, CallExpr *TheCall) { in CheckMipsBuiltinFunctionCall() argument
2991 return CheckMipsBuiltinCpu(TI, BuiltinID, TheCall) || in CheckMipsBuiltinFunctionCall()
2992 CheckMipsBuiltinArgument(BuiltinID, TheCall); in CheckMipsBuiltinFunctionCall()
2996 CallExpr *TheCall) { in CheckMipsBuiltinCpu() argument
3001 return Diag(TheCall->getBeginLoc(), diag::err_mips_builtin_requires_dsp); in CheckMipsBuiltinCpu()
3007 return Diag(TheCall->getBeginLoc(), in CheckMipsBuiltinCpu()
3014 return Diag(TheCall->getBeginLoc(), diag::err_mips_builtin_requires_msa); in CheckMipsBuiltinCpu()
3029 bool Sema::CheckMipsBuiltinArgument(unsigned BuiltinID, CallExpr *TheCall) { in CheckMipsBuiltinArgument() argument
3200 return SemaBuiltinConstantArgRange(TheCall, i, l, u); in CheckMipsBuiltinArgument()
3202 return SemaBuiltinConstantArgRange(TheCall, i, l, u) || in CheckMipsBuiltinArgument()
3203 SemaBuiltinConstantArgMultiple(TheCall, i, m); in CheckMipsBuiltinArgument()
3288 static bool SemaFeatureCheck(Sema &S, CallExpr *TheCall, in SemaFeatureCheck() argument
3295 S.Diag(TheCall->getBeginLoc(), DiagID) << TheCall->getSourceRange(); in SemaFeatureCheck()
3297 S.Diag(TheCall->getBeginLoc(), DiagID) in SemaFeatureCheck()
3298 << DiagArg << TheCall->getSourceRange(); in SemaFeatureCheck()
3307 bool Sema::SemaValueIsRunOfOnes(CallExpr *TheCall, unsigned ArgNum) { in SemaValueIsRunOfOnes() argument
3310 Expr *Arg = TheCall->getArg(ArgNum); in SemaValueIsRunOfOnes()
3315 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in SemaValueIsRunOfOnes()
3322 return Diag(TheCall->getBeginLoc(), in SemaValueIsRunOfOnes()
3328 CallExpr *TheCall) { in CheckPPCBuiltinFunctionCall() argument
3334 return Diag(TheCall->getBeginLoc(), diag::err_64_bit_builtin_32_bit_tgt) in CheckPPCBuiltinFunctionCall()
3335 << TheCall->getSourceRange(); in CheckPPCBuiltinFunctionCall()
3341 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1) || in CheckPPCBuiltinFunctionCall()
3342 SemaBuiltinConstantArgRange(TheCall, 2, 0, 15); in CheckPPCBuiltinFunctionCall()
3344 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 3); in CheckPPCBuiltinFunctionCall()
3352 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 31) || in CheckPPCBuiltinFunctionCall()
3353 SemaBuiltinConstantArgRange(TheCall, 2, 0, 31); in CheckPPCBuiltinFunctionCall()
3358 return SemaBuiltinConstantArgRange(TheCall, 2, 0, 3); in CheckPPCBuiltinFunctionCall()
3361 return SemaBuiltinVSX(TheCall); in CheckPPCBuiltinFunctionCall()
3366 return SemaFeatureCheck(*this, TheCall, "extdiv", in CheckPPCBuiltinFunctionCall()
3369 return SemaFeatureCheck(*this, TheCall, "bpermd", in CheckPPCBuiltinFunctionCall()
3372 return SemaFeatureCheck(*this, TheCall, "vsx", in CheckPPCBuiltinFunctionCall()
3374 SemaBuiltinConstantArgRange(TheCall, 1, 0, 1); in CheckPPCBuiltinFunctionCall()
3376 return SemaFeatureCheck(*this, TheCall, "vsx", in CheckPPCBuiltinFunctionCall()
3379 return SemaBuiltinConstantArgRange(TheCall, 1, 2, 7); in CheckPPCBuiltinFunctionCall()
3382 QualType VecTy = TheCall->getArg(0)->getType(); in CheckPPCBuiltinFunctionCall()
3383 QualType EltTy = TheCall->getArg(1)->getType(); in CheckPPCBuiltinFunctionCall()
3385 return SemaBuiltinConstantArgRange(TheCall, 2, 0, Width == 32 ? 12 : 8) || in CheckPPCBuiltinFunctionCall()
3386 !isEltOfVectorTy(Context, TheCall, *this, VecTy, EltTy); in CheckPPCBuiltinFunctionCall()
3389 return SemaBuiltinConstantArgRange(TheCall, 3, 0, 255); in CheckPPCBuiltinFunctionCall()
3391 return SemaBuiltinConstantArgRange(TheCall, 2, 0, 7); in CheckPPCBuiltinFunctionCall()
3393 return SemaBuiltinConstantArgRange(TheCall, 2, 0, 7); in CheckPPCBuiltinFunctionCall()
3395 return SemaBuiltinConstantArgRange(TheCall, 3, 0, 7); in CheckPPCBuiltinFunctionCall()
3398 return SemaBuiltinConstantArgRange(TheCall, 2, 1, 31); in CheckPPCBuiltinFunctionCall()
3404 return SemaFeatureCheck(*this, TheCall, "isa-v30-instructions", in CheckPPCBuiltinFunctionCall()
3407 return SemaFeatureCheck(*this, TheCall, "isa-v30-instructions", in CheckPPCBuiltinFunctionCall()
3409 SemaBuiltinConstantArgRange(TheCall, 0, 0, 1); in CheckPPCBuiltinFunctionCall()
3413 return SemaBuiltinConstantArg(TheCall, 1, Result) || in CheckPPCBuiltinFunctionCall()
3414 SemaValueIsRunOfOnes(TheCall, 2); in CheckPPCBuiltinFunctionCall()
3417 return SemaBuiltinConstantArg(TheCall, 2, Result) || in CheckPPCBuiltinFunctionCall()
3418 SemaValueIsRunOfOnes(TheCall, 3); in CheckPPCBuiltinFunctionCall()
3422 return SemaFeatureCheck(*this, TheCall, "power9-vector", in CheckPPCBuiltinFunctionCall()
3426 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 31); in CheckPPCBuiltinFunctionCall()
3428 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 255); in CheckPPCBuiltinFunctionCall()
3430 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 7) || in CheckPPCBuiltinFunctionCall()
3431 SemaBuiltinConstantArgRange(TheCall, 1, 0, 15); in CheckPPCBuiltinFunctionCall()
3433 return SemaBuiltinConstantArgPower2(TheCall, 0); in CheckPPCBuiltinFunctionCall()
3435 return SemaValueIsRunOfOnes(TheCall, 2); in CheckPPCBuiltinFunctionCall()
3441 return SemaFeatureCheck(*this, TheCall, "isa-v207-instructions", in CheckPPCBuiltinFunctionCall()
3445 return SemaFeatureCheck(*this, TheCall, "isa-v207-instructions", in CheckPPCBuiltinFunctionCall()
3447 SemaBuiltinConstantArgRange(TheCall, 1, 1, 16); in CheckPPCBuiltinFunctionCall()
3450 return SemaBuiltinPPCMMACall(TheCall, Types); in CheckPPCBuiltinFunctionCall()
3453 return SemaBuiltinConstantArgRange(TheCall, i, l, u); in CheckPPCBuiltinFunctionCall()
3474 CallExpr *TheCall) { in CheckAMDGCNBuiltinFunctionCall() argument
3493 ExprResult Arg = TheCall->getArg(OrderIndex); in CheckAMDGCNBuiltinFunctionCall()
3523 Arg = TheCall->getArg(ScopeIndex); in CheckAMDGCNBuiltinFunctionCall()
3534 bool Sema::CheckRISCVLMUL(CallExpr *TheCall, unsigned ArgNum) { in CheckRISCVLMUL() argument
3538 Expr *Arg = TheCall->getArg(ArgNum); in CheckRISCVLMUL()
3543 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in CheckRISCVLMUL()
3550 return Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_invalid_lmul) in CheckRISCVLMUL()
3556 CallExpr *TheCall) { in CheckRISCVBuiltinFunctionCall() argument
3581 Diag(TheCall->getBeginLoc(), diag::err_riscv_builtin_requires_extension) in CheckRISCVBuiltinFunctionCall()
3582 << TheCall->getSourceRange() << StringRef(FeatureStr); in CheckRISCVBuiltinFunctionCall()
3590 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 3) || in CheckRISCVBuiltinFunctionCall()
3591 CheckRISCVLMUL(TheCall, 2); in CheckRISCVBuiltinFunctionCall()
3593 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 3) || in CheckRISCVBuiltinFunctionCall()
3594 CheckRISCVLMUL(TheCall, 1); in CheckRISCVBuiltinFunctionCall()
3625 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1); in CheckRISCVBuiltinFunctionCall()
3646 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 3); in CheckRISCVBuiltinFunctionCall()
3657 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 7); in CheckRISCVBuiltinFunctionCall()
3688 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1); in CheckRISCVBuiltinFunctionCall()
3709 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 3); in CheckRISCVBuiltinFunctionCall()
3720 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 7); in CheckRISCVBuiltinFunctionCall()
3727 CallExpr *TheCall) { in CheckSystemZBuiltinFunctionCall() argument
3729 Expr *Arg = TheCall->getArg(0); in CheckSystemZBuiltinFunctionCall()
3760 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 15) || in CheckSystemZBuiltinFunctionCall()
3761 SemaBuiltinConstantArgRange(TheCall, 2, 0, 15); in CheckSystemZBuiltinFunctionCall()
3792 return SemaBuiltinConstantArgRange(TheCall, i, l, u); in CheckSystemZBuiltinFunctionCall()
3799 CallExpr *TheCall) { in SemaBuiltinCpuSupports() argument
3800 Expr *Arg = TheCall->getArg(0); in SemaBuiltinCpuSupports()
3804 return S.Diag(TheCall->getBeginLoc(), diag::err_expr_not_string_literal) in SemaBuiltinCpuSupports()
3811 return S.Diag(TheCall->getBeginLoc(), diag::err_invalid_cpu_supports) in SemaBuiltinCpuSupports()
3819 static bool SemaBuiltinCpuIs(Sema &S, const TargetInfo &TI, CallExpr *TheCall) { in SemaBuiltinCpuIs() argument
3820 Expr *Arg = TheCall->getArg(0); in SemaBuiltinCpuIs()
3824 return S.Diag(TheCall->getBeginLoc(), diag::err_expr_not_string_literal) in SemaBuiltinCpuIs()
3831 return S.Diag(TheCall->getBeginLoc(), diag::err_invalid_cpu_is) in SemaBuiltinCpuIs()
3837 bool Sema::CheckX86BuiltinRoundingOrSAE(unsigned BuiltinID, CallExpr *TheCall) { in CheckX86BuiltinRoundingOrSAE() argument
4019 Expr *Arg = TheCall->getArg(ArgNum); in CheckX86BuiltinRoundingOrSAE()
4024 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in CheckX86BuiltinRoundingOrSAE()
4037 return Diag(TheCall->getBeginLoc(), diag::err_x86_builtin_invalid_rounding) in CheckX86BuiltinRoundingOrSAE()
4043 CallExpr *TheCall) { in CheckX86BuiltinGatherScatterScale() argument
4129 Expr *Arg = TheCall->getArg(ArgNum); in CheckX86BuiltinGatherScatterScale()
4134 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in CheckX86BuiltinGatherScatterScale()
4140 return Diag(TheCall->getBeginLoc(), diag::err_x86_builtin_invalid_scale) in CheckX86BuiltinGatherScatterScale()
4146 bool Sema::CheckX86BuiltinTileArgumentsRange(CallExpr *TheCall, in CheckX86BuiltinTileArgumentsRange() argument
4149 if (SemaBuiltinConstantArgRange(TheCall, ArgNum, TileRegLow, TileRegHigh)) in CheckX86BuiltinTileArgumentsRange()
4155 bool Sema::CheckX86BuiltinTileDuplicate(CallExpr *TheCall, in CheckX86BuiltinTileDuplicate() argument
4161 Expr *Arg = TheCall->getArg(ArgNum); in CheckX86BuiltinTileDuplicate()
4166 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in CheckX86BuiltinTileDuplicate()
4172 return Diag(TheCall->getBeginLoc(), in CheckX86BuiltinTileDuplicate()
4174 << TheCall->getArg(ArgNum)->getSourceRange(); in CheckX86BuiltinTileDuplicate()
4180 bool Sema::CheckX86BuiltinTileRangeAndDuplicate(CallExpr *TheCall, in CheckX86BuiltinTileRangeAndDuplicate() argument
4182 return CheckX86BuiltinTileArgumentsRange(TheCall, ArgNums) || in CheckX86BuiltinTileRangeAndDuplicate()
4183 CheckX86BuiltinTileDuplicate(TheCall, ArgNums); in CheckX86BuiltinTileRangeAndDuplicate()
4186 bool Sema::CheckX86BuiltinTileArguments(unsigned BuiltinID, CallExpr *TheCall) { in CheckX86BuiltinTileArguments() argument
4194 return CheckX86BuiltinTileArgumentsRange(TheCall, 0); in CheckX86BuiltinTileArguments()
4200 return CheckX86BuiltinTileRangeAndDuplicate(TheCall, {0, 1, 2}); in CheckX86BuiltinTileArguments()
4215 CallExpr *TheCall) { in CheckX86BuiltinFunctionCall() argument
4217 return SemaBuiltinCpuSupports(*this, TI, TheCall); in CheckX86BuiltinFunctionCall()
4220 return SemaBuiltinCpuIs(*this, TI, TheCall); in CheckX86BuiltinFunctionCall()
4225 return Diag(TheCall->getCallee()->getBeginLoc(), in CheckX86BuiltinFunctionCall()
4229 if (CheckX86BuiltinRoundingOrSAE(BuiltinID, TheCall)) in CheckX86BuiltinFunctionCall()
4233 if (CheckX86BuiltinGatherScatterScale(BuiltinID, TheCall)) in CheckX86BuiltinFunctionCall()
4237 if (CheckX86BuiltinTileArguments(BuiltinID, TheCall)) in CheckX86BuiltinFunctionCall()
4576 return SemaBuiltinConstantArgRange(TheCall, i, l, u, /*RangeIsError*/ false); in CheckX86BuiltinFunctionCall()
4955 bool Sema::CheckFunctionCall(FunctionDecl *FDecl, CallExpr *TheCall, in CheckFunctionCall() argument
4957 bool IsMemberOperatorCall = isa<CXXOperatorCallExpr>(TheCall) && in CheckFunctionCall()
4959 bool IsMemberFunction = isa<CXXMemberCallExpr>(TheCall) || in CheckFunctionCall()
4962 TheCall->getCallee()); in CheckFunctionCall()
4963 Expr** Args = TheCall->getArgs(); in CheckFunctionCall()
4964 unsigned NumArgs = TheCall->getNumArgs(); in CheckFunctionCall()
4976 cast<CXXMemberCallExpr>(TheCall)->getImplicitObjectArgument(); in CheckFunctionCall()
4990 CheckArgAlignment(TheCall->getRParenLoc(), FDecl, "'this'", ThisType, in CheckFunctionCall()
4995 IsMemberFunction, TheCall->getRParenLoc(), in CheckFunctionCall()
4996 TheCall->getCallee()->getSourceRange(), CallType); in CheckFunctionCall()
5004 CheckTCBEnforcement(TheCall, FDecl); in CheckFunctionCall()
5006 CheckAbsoluteValueFunction(TheCall, FDecl); in CheckFunctionCall()
5007 CheckMaxUnsignedZero(TheCall, FDecl); in CheckFunctionCall()
5020 CheckStrlcpycatArguments(TheCall, FnInfo); in CheckFunctionCall()
5023 CheckStrncatArguments(TheCall, FnInfo); in CheckFunctionCall()
5026 CheckFreeArguments(TheCall); in CheckFunctionCall()
5029 CheckMemaccessArguments(TheCall, CMId, FnInfo); in CheckFunctionCall()
5047 bool Sema::CheckPointerCall(NamedDecl *NDecl, CallExpr *TheCall, in CheckPointerCall() argument
5071 llvm::makeArrayRef(TheCall->getArgs(), TheCall->getNumArgs()), in CheckPointerCall()
5072 /*IsMemberFunction=*/false, TheCall->getRParenLoc(), in CheckPointerCall()
5073 TheCall->getCallee()->getSourceRange(), CallType); in CheckPointerCall()
5080 bool Sema::CheckOtherCall(CallExpr *TheCall, const FunctionProtoType *Proto) { in CheckOtherCall() argument
5082 TheCall->getCallee()); in CheckOtherCall()
5084 llvm::makeArrayRef(TheCall->getArgs(), TheCall->getNumArgs()), in CheckOtherCall()
5085 /*IsMemberFunction=*/false, TheCall->getRParenLoc(), in CheckOtherCall()
5086 TheCall->getCallee()->getSourceRange(), CallType); in CheckOtherCall()
5123 CallExpr *TheCall = cast<CallExpr>(TheCallResult.get()); in SemaAtomicOpsOverloaded() local
5124 DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts()); in SemaAtomicOpsOverloaded()
5125 MultiExprArg Args{TheCall->getArgs(), TheCall->getNumArgs()}; in SemaAtomicOpsOverloaded()
5126 return BuildAtomicExpr({TheCall->getBeginLoc(), TheCall->getEndLoc()}, in SemaAtomicOpsOverloaded()
5127 DRE->getSourceRange(), TheCall->getRParenLoc(), Args, in SemaAtomicOpsOverloaded()
5646 CallExpr *TheCall = static_cast<CallExpr *>(TheCallResult.get()); in SemaBuiltinAtomicOverloaded() local
5647 Expr *Callee = TheCall->getCallee(); in SemaBuiltinAtomicOverloaded()
5652 if (TheCall->getNumArgs() < 1) { in SemaBuiltinAtomicOverloaded()
5653 Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) in SemaBuiltinAtomicOverloaded()
5654 << 0 << 1 << TheCall->getNumArgs() << Callee->getSourceRange(); in SemaBuiltinAtomicOverloaded()
5663 Expr *FirstArg = TheCall->getArg(0); in SemaBuiltinAtomicOverloaded()
5668 TheCall->setArg(0, FirstArg); in SemaBuiltinAtomicOverloaded()
5928 if (TheCall->getNumArgs() < 1+NumFixed) { in SemaBuiltinAtomicOverloaded()
5929 Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) in SemaBuiltinAtomicOverloaded()
5930 << 0 << 1 + NumFixed << TheCall->getNumArgs() in SemaBuiltinAtomicOverloaded()
5935 Diag(TheCall->getEndLoc(), diag::warn_atomic_implicit_seq_cst) in SemaBuiltinAtomicOverloaded()
5939 Diag(TheCall->getEndLoc(), diag::warn_sync_fetch_and_nand_semantics_change) in SemaBuiltinAtomicOverloaded()
5965 ExprResult Arg = TheCall->getArg(i+1); in SemaBuiltinAtomicOverloaded()
5982 TheCall->setArg(i+1, Arg.get()); in SemaBuiltinAtomicOverloaded()
5996 TheCall->setCallee(PromotedCall.get()); in SemaBuiltinAtomicOverloaded()
6001 TheCall->setType(ResultType); in SemaBuiltinAtomicOverloaded()
6022 CallExpr *TheCall = (CallExpr *)TheCallResult.get(); in SemaBuiltinNontemporalOverloaded() local
6024 cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts()); in SemaBuiltinNontemporalOverloaded()
6034 if (checkArgCount(*this, TheCall, numArgs)) in SemaBuiltinNontemporalOverloaded()
6041 Expr *PointerArg = TheCall->getArg(numArgs - 1); in SemaBuiltinNontemporalOverloaded()
6048 TheCall->setArg(numArgs - 1, PointerArg); in SemaBuiltinNontemporalOverloaded()
6071 TheCall->setType(ValType); in SemaBuiltinNontemporalOverloaded()
6075 ExprResult ValArg = TheCall->getArg(0); in SemaBuiltinNontemporalOverloaded()
6082 TheCall->setArg(0, ValArg.get()); in SemaBuiltinNontemporalOverloaded()
6083 TheCall->setType(Context.VoidTy); in SemaBuiltinNontemporalOverloaded()
6222 bool Sema::SemaBuiltinVAStart(unsigned BuiltinID, CallExpr *TheCall) { in SemaBuiltinVAStart() argument
6223 Expr *Fn = TheCall->getCallee(); in SemaBuiltinVAStart()
6228 if (checkArgCount(*this, TheCall, 2)) in SemaBuiltinVAStart()
6232 if (checkBuiltinArgument(*this, TheCall, 0)) in SemaBuiltinVAStart()
6243 const Expr *Arg = TheCall->getArg(1)->IgnoreParenCasts(); in SemaBuiltinVAStart()
6263 Diag(TheCall->getArg(1)->getBeginLoc(), in SemaBuiltinVAStart()
6284 TheCall->setType(Context.VoidTy); in SemaBuiltinVAStart()
6338 bool Sema::SemaBuiltinUnorderedCompare(CallExpr *TheCall) { in SemaBuiltinUnorderedCompare() argument
6339 if (checkArgCount(*this, TheCall, 2)) in SemaBuiltinUnorderedCompare()
6342 ExprResult OrigArg0 = TheCall->getArg(0); in SemaBuiltinUnorderedCompare()
6343 ExprResult OrigArg1 = TheCall->getArg(1); in SemaBuiltinUnorderedCompare()
6348 OrigArg0, OrigArg1, TheCall->getExprLoc(), ACK_Comparison); in SemaBuiltinUnorderedCompare()
6355 TheCall->setArg(0, OrigArg0.get()); in SemaBuiltinUnorderedCompare()
6356 TheCall->setArg(1, OrigArg1.get()); in SemaBuiltinUnorderedCompare()
6377 bool Sema::SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs) { in SemaBuiltinFPClassification() argument
6378 if (checkArgCount(*this, TheCall, NumArgs)) in SemaBuiltinFPClassification()
6384 Expr *Arg = TheCall->getArg(i); in SemaBuiltinFPClassification()
6393 TheCall->setArg(i, Res.get()); in SemaBuiltinFPClassification()
6396 Expr *OrigArg = TheCall->getArg(NumArgs-1); in SemaBuiltinFPClassification()
6408 TheCall->setArg(NumArgs - 1, OrigArg); in SemaBuiltinFPClassification()
6420 bool Sema::SemaBuiltinComplex(CallExpr *TheCall) { in SemaBuiltinComplex() argument
6421 if (checkArgCount(*this, TheCall, 2)) in SemaBuiltinComplex()
6426 Expr *Arg = TheCall->getArg(I); in SemaBuiltinComplex()
6443 TheCall->setArg(I, Converted.get()); in SemaBuiltinComplex()
6447 TheCall->setType(Context.DependentTy); in SemaBuiltinComplex()
6451 Expr *Real = TheCall->getArg(0); in SemaBuiltinComplex()
6452 Expr *Imag = TheCall->getArg(1); in SemaBuiltinComplex()
6464 return Diag(TheCall->getBeginLoc(), diag::err_invalid_complex_spec) in SemaBuiltinComplex()
6467 return Diag(TheCall->getBeginLoc(), diag::err_invalid_complex_spec) in SemaBuiltinComplex()
6470 TheCall->setType(Context.getComplexType(Real->getType())); in SemaBuiltinComplex()
6481 bool Sema::SemaBuiltinVSX(CallExpr *TheCall) { in SemaBuiltinVSX() argument
6483 if (checkArgCount(*this, TheCall, ExpectedNumArgs)) in SemaBuiltinVSX()
6487 if (!TheCall->getArg(2)->isIntegerConstantExpr(Context)) in SemaBuiltinVSX()
6488 return Diag(TheCall->getBeginLoc(), in SemaBuiltinVSX()
6490 << 3 /* argument index */ << TheCall->getDirectCallee() in SemaBuiltinVSX()
6491 << SourceRange(TheCall->getArg(2)->getBeginLoc(), in SemaBuiltinVSX()
6492 TheCall->getArg(2)->getEndLoc()); in SemaBuiltinVSX()
6494 QualType Arg1Ty = TheCall->getArg(0)->getType(); in SemaBuiltinVSX()
6495 QualType Arg2Ty = TheCall->getArg(1)->getType(); in SemaBuiltinVSX()
6498 SourceLocation BuiltinLoc = TheCall->getBeginLoc(); in SemaBuiltinVSX()
6502 << TheCall->getDirectCallee() in SemaBuiltinVSX()
6503 << SourceRange(TheCall->getArg(0)->getBeginLoc(), in SemaBuiltinVSX()
6504 TheCall->getArg(1)->getEndLoc()); in SemaBuiltinVSX()
6510 << TheCall->getDirectCallee() in SemaBuiltinVSX()
6511 << SourceRange(TheCall->getArg(0)->getBeginLoc(), in SemaBuiltinVSX()
6512 TheCall->getArg(1)->getEndLoc()); in SemaBuiltinVSX()
6518 TheCall->setType(Arg1Ty); in SemaBuiltinVSX()
6525 ExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) { in SemaBuiltinShuffleVector() argument
6526 if (TheCall->getNumArgs() < 2) in SemaBuiltinShuffleVector()
6527 return ExprError(Diag(TheCall->getEndLoc(), in SemaBuiltinShuffleVector()
6529 << 0 /*function call*/ << 2 << TheCall->getNumArgs() in SemaBuiltinShuffleVector()
6530 << TheCall->getSourceRange()); in SemaBuiltinShuffleVector()
6535 QualType resType = TheCall->getArg(0)->getType(); in SemaBuiltinShuffleVector()
6538 if (!TheCall->getArg(0)->isTypeDependent() && in SemaBuiltinShuffleVector()
6539 !TheCall->getArg(1)->isTypeDependent()) { in SemaBuiltinShuffleVector()
6540 QualType LHSType = TheCall->getArg(0)->getType(); in SemaBuiltinShuffleVector()
6541 QualType RHSType = TheCall->getArg(1)->getType(); in SemaBuiltinShuffleVector()
6545 Diag(TheCall->getBeginLoc(), diag::err_vec_builtin_non_vector) in SemaBuiltinShuffleVector()
6546 << TheCall->getDirectCallee() in SemaBuiltinShuffleVector()
6547 << SourceRange(TheCall->getArg(0)->getBeginLoc(), in SemaBuiltinShuffleVector()
6548 TheCall->getArg(1)->getEndLoc())); in SemaBuiltinShuffleVector()
6551 unsigned numResElements = TheCall->getNumArgs() - 2; in SemaBuiltinShuffleVector()
6556 if (TheCall->getNumArgs() == 2) { in SemaBuiltinShuffleVector()
6559 return ExprError(Diag(TheCall->getBeginLoc(), in SemaBuiltinShuffleVector()
6561 << TheCall->getDirectCallee() in SemaBuiltinShuffleVector()
6562 << SourceRange(TheCall->getArg(1)->getBeginLoc(), in SemaBuiltinShuffleVector()
6563 TheCall->getArg(1)->getEndLoc())); in SemaBuiltinShuffleVector()
6565 return ExprError(Diag(TheCall->getBeginLoc(), in SemaBuiltinShuffleVector()
6567 << TheCall->getDirectCallee() in SemaBuiltinShuffleVector()
6568 << SourceRange(TheCall->getArg(0)->getBeginLoc(), in SemaBuiltinShuffleVector()
6569 TheCall->getArg(1)->getEndLoc())); in SemaBuiltinShuffleVector()
6577 for (unsigned i = 2; i < TheCall->getNumArgs(); i++) { in SemaBuiltinShuffleVector()
6578 if (TheCall->getArg(i)->isTypeDependent() || in SemaBuiltinShuffleVector()
6579 TheCall->getArg(i)->isValueDependent()) in SemaBuiltinShuffleVector()
6583 if (!(Result = TheCall->getArg(i)->getIntegerConstantExpr(Context))) in SemaBuiltinShuffleVector()
6584 return ExprError(Diag(TheCall->getBeginLoc(), in SemaBuiltinShuffleVector()
6586 << TheCall->getArg(i)->getSourceRange()); in SemaBuiltinShuffleVector()
6594 return ExprError(Diag(TheCall->getBeginLoc(), in SemaBuiltinShuffleVector()
6596 << TheCall->getArg(i)->getSourceRange()); in SemaBuiltinShuffleVector()
6601 for (unsigned i = 0, e = TheCall->getNumArgs(); i != e; i++) { in SemaBuiltinShuffleVector()
6602 exprs.push_back(TheCall->getArg(i)); in SemaBuiltinShuffleVector()
6603 TheCall->setArg(i, nullptr); in SemaBuiltinShuffleVector()
6607 TheCall->getCallee()->getBeginLoc(), in SemaBuiltinShuffleVector()
6608 TheCall->getRParenLoc()); in SemaBuiltinShuffleVector()
6644 bool Sema::SemaBuiltinPrefetch(CallExpr *TheCall) { in SemaBuiltinPrefetch() argument
6645 unsigned NumArgs = TheCall->getNumArgs(); in SemaBuiltinPrefetch()
6648 return Diag(TheCall->getEndLoc(), in SemaBuiltinPrefetch()
6650 << 0 /*function call*/ << 3 << NumArgs << TheCall->getSourceRange(); in SemaBuiltinPrefetch()
6655 if (SemaBuiltinConstantArgRange(TheCall, i, 0, i == 1 ? 1 : 3)) in SemaBuiltinPrefetch()
6662 bool Sema::SemaBuiltinArithmeticFence(CallExpr *TheCall) { in SemaBuiltinArithmeticFence() argument
6664 return Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) in SemaBuiltinArithmeticFence()
6665 << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc()); in SemaBuiltinArithmeticFence()
6666 if (checkArgCount(*this, TheCall, 1)) in SemaBuiltinArithmeticFence()
6668 Expr *Arg = TheCall->getArg(0); in SemaBuiltinArithmeticFence()
6674 return Diag(TheCall->getEndLoc(), diag::err_typecheck_expect_flt_or_vector) in SemaBuiltinArithmeticFence()
6678 TheCall->setArg(0, FirstArg.get()); in SemaBuiltinArithmeticFence()
6680 TheCall->setType(TheCall->getArg(0)->getType()); in SemaBuiltinArithmeticFence()
6687 bool Sema::SemaBuiltinAssume(CallExpr *TheCall) { in SemaBuiltinAssume() argument
6688 Expr *Arg = TheCall->getArg(0); in SemaBuiltinAssume()
6694 << cast<FunctionDecl>(TheCall->getCalleeDecl())->getIdentifier(); in SemaBuiltinAssume()
6702 bool Sema::SemaBuiltinAllocaWithAlign(CallExpr *TheCall) { in SemaBuiltinAllocaWithAlign() argument
6704 Expr *Arg = TheCall->getArg(1); in SemaBuiltinAllocaWithAlign()
6712 Diag(TheCall->getBeginLoc(), diag::warn_alloca_align_alignof) in SemaBuiltinAllocaWithAlign()
6718 return Diag(TheCall->getBeginLoc(), diag::err_alignment_not_power_of_two) in SemaBuiltinAllocaWithAlign()
6722 return Diag(TheCall->getBeginLoc(), diag::err_alignment_too_small) in SemaBuiltinAllocaWithAlign()
6726 return Diag(TheCall->getBeginLoc(), diag::err_alignment_too_big) in SemaBuiltinAllocaWithAlign()
6735 bool Sema::SemaBuiltinAssumeAligned(CallExpr *TheCall) { in SemaBuiltinAssumeAligned() argument
6736 unsigned NumArgs = TheCall->getNumArgs(); in SemaBuiltinAssumeAligned()
6739 return Diag(TheCall->getEndLoc(), in SemaBuiltinAssumeAligned()
6741 << 0 /*function call*/ << 3 << NumArgs << TheCall->getSourceRange(); in SemaBuiltinAssumeAligned()
6744 Expr *Arg = TheCall->getArg(1); in SemaBuiltinAssumeAligned()
6749 if (SemaBuiltinConstantArg(TheCall, 1, Result)) in SemaBuiltinAssumeAligned()
6753 return Diag(TheCall->getBeginLoc(), diag::err_alignment_not_power_of_two) in SemaBuiltinAssumeAligned()
6757 Diag(TheCall->getBeginLoc(), diag::warn_assume_aligned_too_great) in SemaBuiltinAssumeAligned()
6762 ExprResult Arg(TheCall->getArg(2)); in SemaBuiltinAssumeAligned()
6767 TheCall->setArg(2, Arg.get()); in SemaBuiltinAssumeAligned()
6773 bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) { in SemaBuiltinOSLogFormat() argument
6775 cast<FunctionDecl>(TheCall->getCalleeDecl())->getBuiltinID(); in SemaBuiltinOSLogFormat()
6778 unsigned NumArgs = TheCall->getNumArgs(); in SemaBuiltinOSLogFormat()
6781 return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args) in SemaBuiltinOSLogFormat()
6783 << TheCall->getSourceRange(); in SemaBuiltinOSLogFormat()
6786 return Diag(TheCall->getEndLoc(), in SemaBuiltinOSLogFormat()
6789 << TheCall->getSourceRange(); in SemaBuiltinOSLogFormat()
6795 ExprResult Arg(TheCall->getArg(i)); in SemaBuiltinOSLogFormat()
6801 TheCall->setArg(i, Arg.get()); in SemaBuiltinOSLogFormat()
6808 ExprResult Arg = CheckOSLogFormatStringArg(TheCall->getArg(i)); in SemaBuiltinOSLogFormat()
6811 TheCall->setArg(i, Arg.get()); in SemaBuiltinOSLogFormat()
6819 TheCall->getArg(i), VariadicFunction, nullptr); in SemaBuiltinOSLogFormat()
6826 << TheCall->getSourceRange(); in SemaBuiltinOSLogFormat()
6828 TheCall->setArg(i, Arg.get()); in SemaBuiltinOSLogFormat()
6836 ArrayRef<const Expr *> Args(TheCall->getArgs(), TheCall->getNumArgs()); in SemaBuiltinOSLogFormat()
6839 VariadicFunction, TheCall->getBeginLoc(), SourceRange(), in SemaBuiltinOSLogFormat()
6846 TheCall->setType(Context.getSizeType()); in SemaBuiltinOSLogFormat()
6848 TheCall->setType(Context.VoidPtrTy); in SemaBuiltinOSLogFormat()
6855 bool Sema::SemaBuiltinConstantArg(CallExpr *TheCall, int ArgNum, in SemaBuiltinConstantArg() argument
6857 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinConstantArg()
6858 DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts()); in SemaBuiltinConstantArg()
6865 return Diag(TheCall->getBeginLoc(), diag::err_constant_integer_arg_type) in SemaBuiltinConstantArg()
6873 bool Sema::SemaBuiltinConstantArgRange(CallExpr *TheCall, int ArgNum, in SemaBuiltinConstantArgRange() argument
6880 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinConstantArgRange()
6885 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in SemaBuiltinConstantArgRange()
6890 return Diag(TheCall->getBeginLoc(), diag::err_argument_invalid_range) in SemaBuiltinConstantArgRange()
6895 DiagRuntimeBehavior(TheCall->getBeginLoc(), TheCall, in SemaBuiltinConstantArgRange()
6906 bool Sema::SemaBuiltinConstantArgMultiple(CallExpr *TheCall, int ArgNum, in SemaBuiltinConstantArgMultiple() argument
6911 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinConstantArgMultiple()
6916 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in SemaBuiltinConstantArgMultiple()
6920 return Diag(TheCall->getBeginLoc(), diag::err_argument_not_multiple) in SemaBuiltinConstantArgMultiple()
6928 bool Sema::SemaBuiltinConstantArgPower2(CallExpr *TheCall, int ArgNum) { in SemaBuiltinConstantArgPower2() argument
6932 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinConstantArgPower2()
6937 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in SemaBuiltinConstantArgPower2()
6945 return Diag(TheCall->getBeginLoc(), diag::err_argument_not_power_of_2) in SemaBuiltinConstantArgPower2()
6974 bool Sema::SemaBuiltinConstantArgShiftedByte(CallExpr *TheCall, int ArgNum, in SemaBuiltinConstantArgShiftedByte() argument
6979 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinConstantArgShiftedByte()
6984 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in SemaBuiltinConstantArgShiftedByte()
6994 return Diag(TheCall->getBeginLoc(), diag::err_argument_not_shifted_byte) in SemaBuiltinConstantArgShiftedByte()
7003 bool Sema::SemaBuiltinConstantArgShiftedByteOrXXFF(CallExpr *TheCall, in SemaBuiltinConstantArgShiftedByteOrXXFF() argument
7009 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinConstantArgShiftedByteOrXXFF()
7014 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in SemaBuiltinConstantArgShiftedByteOrXXFF()
7026 return Diag(TheCall->getBeginLoc(), in SemaBuiltinConstantArgShiftedByteOrXXFF()
7032 bool Sema::SemaBuiltinARMMemoryTaggingCall(unsigned BuiltinID, CallExpr *TheCall) { in SemaBuiltinARMMemoryTaggingCall() argument
7034 if (checkArgCount(*this, TheCall, 2)) in SemaBuiltinARMMemoryTaggingCall()
7036 Expr *Arg0 = TheCall->getArg(0); in SemaBuiltinARMMemoryTaggingCall()
7037 Expr *Arg1 = TheCall->getArg(1); in SemaBuiltinARMMemoryTaggingCall()
7044 return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) in SemaBuiltinARMMemoryTaggingCall()
7046 TheCall->setArg(0, FirstArg.get()); in SemaBuiltinARMMemoryTaggingCall()
7053 return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_integer) in SemaBuiltinARMMemoryTaggingCall()
7057 TheCall->setType(FirstArgType); in SemaBuiltinARMMemoryTaggingCall()
7062 if (checkArgCount(*this, TheCall, 2)) in SemaBuiltinARMMemoryTaggingCall()
7065 Expr *Arg0 = TheCall->getArg(0); in SemaBuiltinARMMemoryTaggingCall()
7071 return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) in SemaBuiltinARMMemoryTaggingCall()
7073 TheCall->setArg(0, FirstArg.get()); in SemaBuiltinARMMemoryTaggingCall()
7076 TheCall->setType(FirstArgType); in SemaBuiltinARMMemoryTaggingCall()
7079 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 15); in SemaBuiltinARMMemoryTaggingCall()
7083 if (checkArgCount(*this, TheCall, 2)) in SemaBuiltinARMMemoryTaggingCall()
7085 Expr *Arg0 = TheCall->getArg(0); in SemaBuiltinARMMemoryTaggingCall()
7086 Expr *Arg1 = TheCall->getArg(1); in SemaBuiltinARMMemoryTaggingCall()
7093 return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) in SemaBuiltinARMMemoryTaggingCall()
7098 return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_integer) in SemaBuiltinARMMemoryTaggingCall()
7100 TheCall->setType(Context.IntTy); in SemaBuiltinARMMemoryTaggingCall()
7106 if (checkArgCount(*this, TheCall, 1)) in SemaBuiltinARMMemoryTaggingCall()
7108 Expr *Arg0 = TheCall->getArg(0); in SemaBuiltinARMMemoryTaggingCall()
7115 return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_must_be_pointer) in SemaBuiltinARMMemoryTaggingCall()
7117 TheCall->setArg(0, FirstArg.get()); in SemaBuiltinARMMemoryTaggingCall()
7121 TheCall->setType(FirstArgType); in SemaBuiltinARMMemoryTaggingCall()
7126 Expr *ArgA = TheCall->getArg(0); in SemaBuiltinARMMemoryTaggingCall()
7127 Expr *ArgB = TheCall->getArg(1); in SemaBuiltinARMMemoryTaggingCall()
7144 return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_null_or_pointer) in SemaBuiltinARMMemoryTaggingCall()
7148 return Diag(TheCall->getBeginLoc(), diag::err_memtag_arg_null_or_pointer) in SemaBuiltinARMMemoryTaggingCall()
7159 return Diag(TheCall->getBeginLoc(), diag::err_typecheck_sub_ptr_compatible) in SemaBuiltinARMMemoryTaggingCall()
7167 return Diag(TheCall->getBeginLoc(), diag::err_memtag_any2arg_pointer) in SemaBuiltinARMMemoryTaggingCall()
7176 TheCall->setArg(0, ArgExprA.get()); in SemaBuiltinARMMemoryTaggingCall()
7177 TheCall->setArg(1, ArgExprB.get()); in SemaBuiltinARMMemoryTaggingCall()
7178 TheCall->setType(Context.LongLongTy); in SemaBuiltinARMMemoryTaggingCall()
7187 bool Sema::SemaBuiltinARMSpecialReg(unsigned BuiltinID, CallExpr *TheCall, in SemaBuiltinARMSpecialReg() argument
7205 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinARMSpecialReg()
7211 return Diag(TheCall->getBeginLoc(), diag::err_expr_not_string_literal) in SemaBuiltinARMSpecialReg()
7220 return Diag(TheCall->getBeginLoc(), diag::err_arm_invalid_specialreg) in SemaBuiltinARMSpecialReg()
7262 return Diag(TheCall->getBeginLoc(), diag::err_arm_invalid_specialreg) in SemaBuiltinARMSpecialReg()
7271 if (TheCall->getNumArgs() != 2) in SemaBuiltinARMSpecialReg()
7279 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 15); in SemaBuiltinARMSpecialReg()
7289 bool Sema::SemaBuiltinPPCMMACall(CallExpr *TheCall, const char *TypeStr) { in SemaBuiltinPPCMMACall() argument
7300 TheCall->setType(type); in SemaBuiltinPPCMMACall()
7305 if (ArgNum >= TheCall->getNumArgs()) { in SemaBuiltinPPCMMACall()
7310 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinPPCMMACall()
7323 SemaBuiltinConstantArgRange(TheCall, ArgNum, 0, Mask, true)) in SemaBuiltinPPCMMACall()
7337 if (checkArgCount(*this, TheCall, ArgNum)) in SemaBuiltinPPCMMACall()
7346 bool Sema::SemaBuiltinLongjmp(CallExpr *TheCall) { in SemaBuiltinLongjmp() argument
7348 return Diag(TheCall->getBeginLoc(), diag::err_builtin_longjmp_unsupported) in SemaBuiltinLongjmp()
7349 << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc()); in SemaBuiltinLongjmp()
7351 Expr *Arg = TheCall->getArg(1); in SemaBuiltinLongjmp()
7355 if (SemaBuiltinConstantArg(TheCall, 1, Result)) in SemaBuiltinLongjmp()
7359 return Diag(TheCall->getBeginLoc(), diag::err_builtin_longjmp_invalid_val) in SemaBuiltinLongjmp()
7367 bool Sema::SemaBuiltinSetjmp(CallExpr *TheCall) { in SemaBuiltinSetjmp() argument
7369 return Diag(TheCall->getBeginLoc(), diag::err_builtin_setjmp_unsupported) in SemaBuiltinSetjmp()
7370 << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc()); in SemaBuiltinSetjmp()
12274 static void CheckImplicitArgumentConversions(Sema &S, CallExpr *TheCall, in CheckImplicitArgumentConversions() argument
12276 unsigned NumArgs = TheCall->getNumArgs(); in CheckImplicitArgumentConversions()
12278 Expr *CurrA = TheCall->getArg(i); in CheckImplicitArgumentConversions()
12283 IsImplicitBoolFloatConversion(S, TheCall->getArg(i - 1), false)); in CheckImplicitArgumentConversions()
12285 IsImplicitBoolFloatConversion(S, TheCall->getArg(i + 1), false)); in CheckImplicitArgumentConversions()
16411 ExprResult Sema::SemaBuiltinMatrixTranspose(CallExpr *TheCall, in SemaBuiltinMatrixTranspose() argument
16413 if (checkArgCount(*this, TheCall, 1)) in SemaBuiltinMatrixTranspose()
16416 ExprResult MatrixArg = DefaultLvalueConversion(TheCall->getArg(0)); in SemaBuiltinMatrixTranspose()
16433 TheCall->setType(ResultType); in SemaBuiltinMatrixTranspose()
16436 TheCall->setArg(0, Matrix); in SemaBuiltinMatrixTranspose()
16460 ExprResult Sema::SemaBuiltinMatrixColumnMajorLoad(CallExpr *TheCall, in SemaBuiltinMatrixColumnMajorLoad() argument
16463 Diag(TheCall->getBeginLoc(), diag::err_builtin_matrix_disabled); in SemaBuiltinMatrixColumnMajorLoad()
16467 if (checkArgCount(*this, TheCall, 4)) in SemaBuiltinMatrixColumnMajorLoad()
16471 Expr *PtrExpr = TheCall->getArg(PtrArgIdx); in SemaBuiltinMatrixColumnMajorLoad()
16472 Expr *RowsExpr = TheCall->getArg(1); in SemaBuiltinMatrixColumnMajorLoad()
16473 Expr *ColumnsExpr = TheCall->getArg(2); in SemaBuiltinMatrixColumnMajorLoad()
16474 Expr *StrideExpr = TheCall->getArg(3); in SemaBuiltinMatrixColumnMajorLoad()
16484 TheCall->setArg(0, PtrExpr); in SemaBuiltinMatrixColumnMajorLoad()
16486 TheCall->setType(Context.DependentTy); in SemaBuiltinMatrixColumnMajorLoad()
16487 return TheCall; in SemaBuiltinMatrixColumnMajorLoad()
16520 TheCall->setArg(1, RowsExpr); in SemaBuiltinMatrixColumnMajorLoad()
16527 TheCall->setArg(2, ColumnsExpr); in SemaBuiltinMatrixColumnMajorLoad()
16535 TheCall->setType(Context.DependentTy); in SemaBuiltinMatrixColumnMajorLoad()
16553 TheCall->setArg(3, StrideExpr); in SemaBuiltinMatrixColumnMajorLoad()
16570 TheCall->setType( in SemaBuiltinMatrixColumnMajorLoad()
16575 ExprResult Sema::SemaBuiltinMatrixColumnMajorStore(CallExpr *TheCall, in SemaBuiltinMatrixColumnMajorStore() argument
16577 if (checkArgCount(*this, TheCall, 3)) in SemaBuiltinMatrixColumnMajorStore()
16581 Expr *MatrixExpr = TheCall->getArg(0); in SemaBuiltinMatrixColumnMajorStore()
16582 Expr *PtrExpr = TheCall->getArg(PtrArgIdx); in SemaBuiltinMatrixColumnMajorStore()
16583 Expr *StrideExpr = TheCall->getArg(2); in SemaBuiltinMatrixColumnMajorStore()
16592 TheCall->setArg(0, MatrixExpr); in SemaBuiltinMatrixColumnMajorStore()
16595 TheCall->setType(Context.DependentTy); in SemaBuiltinMatrixColumnMajorStore()
16596 return TheCall; in SemaBuiltinMatrixColumnMajorStore()
16610 TheCall->setArg(1, PtrExpr); in SemaBuiltinMatrixColumnMajorStore()
16612 TheCall->setType(Context.DependentTy); in SemaBuiltinMatrixColumnMajorStore()
16613 return TheCall; in SemaBuiltinMatrixColumnMajorStore()
16650 TheCall->setArg(2, StrideExpr); in SemaBuiltinMatrixColumnMajorStore()
16676 void Sema::CheckTCBEnforcement(const CallExpr *TheCall, in CheckTCBEnforcement() argument
16700 this->Diag(TheCall->getExprLoc(), in CheckTCBEnforcement()