Lines Matching refs:TheCall
130 static bool SemaBuiltinAnnotation(Sema &S, CallExpr *TheCall) { in SemaBuiltinAnnotation() argument
131 if (checkArgCount(S, TheCall, 2)) in SemaBuiltinAnnotation()
135 Expr *ValArg = TheCall->getArg(0); in SemaBuiltinAnnotation()
144 Expr *StrArg = TheCall->getArg(1)->IgnoreParenCasts(); in SemaBuiltinAnnotation()
152 TheCall->setType(Ty); in SemaBuiltinAnnotation()
156 static bool SemaBuiltinMSVCAnnotation(Sema &S, CallExpr *TheCall) { in SemaBuiltinMSVCAnnotation() argument
158 if (TheCall->getNumArgs() < 1) { in SemaBuiltinMSVCAnnotation()
159 S.Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) in SemaBuiltinMSVCAnnotation()
160 << 0 << 1 << TheCall->getNumArgs() in SemaBuiltinMSVCAnnotation()
161 << TheCall->getCallee()->getSourceRange(); in SemaBuiltinMSVCAnnotation()
166 for (Expr *Arg : TheCall->arguments()) { in SemaBuiltinMSVCAnnotation()
180 static bool SemaBuiltinAddressof(Sema &S, CallExpr *TheCall) { in SemaBuiltinAddressof() argument
181 if (checkArgCount(S, TheCall, 1)) in SemaBuiltinAddressof()
184 ExprResult Arg(TheCall->getArg(0)); in SemaBuiltinAddressof()
185 QualType ResultType = S.CheckAddressOfOperand(Arg, TheCall->getBeginLoc()); in SemaBuiltinAddressof()
189 TheCall->setArg(0, Arg.get()); in SemaBuiltinAddressof()
190 TheCall->setType(ResultType); in SemaBuiltinAddressof()
194 static bool SemaBuiltinOverflow(Sema &S, CallExpr *TheCall) { in SemaBuiltinOverflow() argument
195 if (checkArgCount(S, TheCall, 3)) in SemaBuiltinOverflow()
200 ExprResult Arg = TheCall->getArg(I); in SemaBuiltinOverflow()
212 TheCall->setArg(I, Arg.get()); in SemaBuiltinOverflow()
219 ExprResult Arg = TheCall->getArg(2); in SemaBuiltinOverflow()
234 TheCall->setArg(2, Arg.get()); in SemaBuiltinOverflow()
240 CallExpr *TheCall, unsigned SizeIdx, in SemaBuiltinMemChkCall() argument
243 if (TheCall->getNumArgs() <= SizeIdx || in SemaBuiltinMemChkCall()
244 TheCall->getNumArgs() <= DstSizeIdx) in SemaBuiltinMemChkCall()
247 const Expr *SizeArg = TheCall->getArg(SizeIdx); in SemaBuiltinMemChkCall()
248 const Expr *DstSizeArg = TheCall->getArg(DstSizeIdx); in SemaBuiltinMemChkCall()
265 SourceLocation SL = TheCall->getBeginLoc(); in SemaBuiltinMemChkCall()
343 static bool SemaBuiltinSEHScopeCheck(Sema &SemaRef, CallExpr *TheCall, in SemaBuiltinSEHScopeCheck() argument
356 auto *DRE = cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts()); in SemaBuiltinSEHScopeCheck()
357 SemaRef.Diag(TheCall->getExprLoc(), DiagID) in SemaBuiltinSEHScopeCheck()
413 static bool SemaOpenCLBuiltinNDRangeAndBlock(Sema &S, CallExpr *TheCall) { in SemaOpenCLBuiltinNDRangeAndBlock() argument
414 if (checkArgCount(S, TheCall, 2)) in SemaOpenCLBuiltinNDRangeAndBlock()
417 if (checkOpenCLSubgroupExt(S, TheCall)) in SemaOpenCLBuiltinNDRangeAndBlock()
421 Expr *NDRangeArg = TheCall->getArg(0); in SemaOpenCLBuiltinNDRangeAndBlock()
424 << TheCall->getDirectCallee() << "'ndrange_t'"; in SemaOpenCLBuiltinNDRangeAndBlock()
428 Expr *BlockArg = TheCall->getArg(1); in SemaOpenCLBuiltinNDRangeAndBlock()
431 << TheCall->getDirectCallee() << "block"; in SemaOpenCLBuiltinNDRangeAndBlock()
440 static bool SemaOpenCLBuiltinKernelWorkGroupSize(Sema &S, CallExpr *TheCall) { in SemaOpenCLBuiltinKernelWorkGroupSize() argument
441 if (checkArgCount(S, TheCall, 1)) in SemaOpenCLBuiltinKernelWorkGroupSize()
444 Expr *BlockArg = TheCall->getArg(0); in SemaOpenCLBuiltinKernelWorkGroupSize()
447 << TheCall->getDirectCallee() << "block"; in SemaOpenCLBuiltinKernelWorkGroupSize()
457 static bool checkOpenCLEnqueueLocalSizeArgs(Sema &S, CallExpr *TheCall, in checkOpenCLEnqueueLocalSizeArgs() argument
461 IllegalParams |= checkOpenCLEnqueueIntType(S, TheCall->getArg(I), in checkOpenCLEnqueueLocalSizeArgs()
468 static bool checkOpenCLEnqueueVariadicArgs(Sema &S, CallExpr *TheCall, in checkOpenCLEnqueueVariadicArgs() argument
475 unsigned TotalNumArgs = TheCall->getNumArgs(); in checkOpenCLEnqueueVariadicArgs()
480 S.Diag(TheCall->getBeginLoc(), in checkOpenCLEnqueueVariadicArgs()
486 return checkOpenCLEnqueueLocalSizeArgs(S, TheCall, NumNonVarArgs, in checkOpenCLEnqueueVariadicArgs()
516 static bool SemaOpenCLBuiltinEnqueueKernel(Sema &S, CallExpr *TheCall) { in SemaOpenCLBuiltinEnqueueKernel() argument
517 unsigned NumArgs = TheCall->getNumArgs(); in SemaOpenCLBuiltinEnqueueKernel()
520 S.Diag(TheCall->getBeginLoc(), diag::err_typecheck_call_too_few_args); in SemaOpenCLBuiltinEnqueueKernel()
524 Expr *Arg0 = TheCall->getArg(0); in SemaOpenCLBuiltinEnqueueKernel()
525 Expr *Arg1 = TheCall->getArg(1); in SemaOpenCLBuiltinEnqueueKernel()
526 Expr *Arg2 = TheCall->getArg(2); in SemaOpenCLBuiltinEnqueueKernel()
527 Expr *Arg3 = TheCall->getArg(3); in SemaOpenCLBuiltinEnqueueKernel()
531 S.Diag(TheCall->getArg(0)->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
533 << TheCall->getDirectCallee() << S.Context.OCLQueueTy; in SemaOpenCLBuiltinEnqueueKernel()
539 S.Diag(TheCall->getArg(1)->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
541 << TheCall->getDirectCallee() << "'kernel_enqueue_flags_t' (i.e. uint)"; in SemaOpenCLBuiltinEnqueueKernel()
547 S.Diag(TheCall->getArg(2)->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
549 << TheCall->getDirectCallee() << "'ndrange_t'"; in SemaOpenCLBuiltinEnqueueKernel()
559 << TheCall->getDirectCallee() << "block"; in SemaOpenCLBuiltinEnqueueKernel()
575 checkOpenCLEnqueueVariadicArgs(S, TheCall, Arg3, 4)); in SemaOpenCLBuiltinEnqueueKernel()
579 Expr *Arg6 = TheCall->getArg(6); in SemaOpenCLBuiltinEnqueueKernel()
582 << TheCall->getDirectCallee() << "block"; in SemaOpenCLBuiltinEnqueueKernel()
590 S.Diag(TheCall->getArg(3)->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
592 << TheCall->getDirectCallee() << "integer"; in SemaOpenCLBuiltinEnqueueKernel()
596 Expr *Arg4 = TheCall->getArg(4); in SemaOpenCLBuiltinEnqueueKernel()
597 Expr *Arg5 = TheCall->getArg(5); in SemaOpenCLBuiltinEnqueueKernel()
603 S.Diag(TheCall->getArg(4)->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
605 << TheCall->getDirectCallee() in SemaOpenCLBuiltinEnqueueKernel()
615 S.Diag(TheCall->getArg(5)->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
617 << TheCall->getDirectCallee() in SemaOpenCLBuiltinEnqueueKernel()
625 return checkOpenCLEnqueueVariadicArgs(S, TheCall, Arg6, 7); in SemaOpenCLBuiltinEnqueueKernel()
629 S.Diag(TheCall->getBeginLoc(), in SemaOpenCLBuiltinEnqueueKernel()
883 static ExprResult SemaBuiltinLaunder(Sema &S, CallExpr *TheCall) { in SemaBuiltinLaunder() argument
884 if (checkArgCount(S, TheCall, 1)) in SemaBuiltinLaunder()
893 QualType ArgTy = TheCall->getArg(0)->getType(); in SemaBuiltinLaunder()
902 TheCall->setType(ParamTy); in SemaBuiltinLaunder()
914 S.Diag(TheCall->getBeginLoc(), diag::err_builtin_launder_invalid_arg) in SemaBuiltinLaunder()
915 << DiagSelect.getValue() << TheCall->getSourceRange(); in SemaBuiltinLaunder()
925 if (S.RequireCompleteType(TheCall->getBeginLoc(), ParamTy->getPointeeType(), in SemaBuiltinLaunder()
935 S.PerformCopyInitialization(Entity, SourceLocation(), TheCall->getArg(0)); in SemaBuiltinLaunder()
938 TheCall->setArg(0, Arg.get()); in SemaBuiltinLaunder()
940 return TheCall; in SemaBuiltinLaunder()
946 CheckBuiltinTargetSupport(Sema &S, unsigned BuiltinID, CallExpr *TheCall, in CheckBuiltinTargetSupport() argument
952 S.Diag(TheCall->getBeginLoc(), diag::err_builtin_target_unsupported) in CheckBuiltinTargetSupport()
953 << TheCall->getSourceRange(); in CheckBuiltinTargetSupport()
959 CallExpr *TheCall) { in CheckBuiltinFunctionCall() argument
960 ExprResult TheCallResult(TheCall); in CheckBuiltinFunctionCall()
975 if (SemaBuiltinConstantArg(TheCall, ArgNo, Result)) in CheckBuiltinFunctionCall()
982 assert(TheCall->getNumArgs() == 1 && in CheckBuiltinFunctionCall()
984 if (CheckObjCString(TheCall->getArg(0))) in CheckBuiltinFunctionCall()
990 if (SemaBuiltinVAStart(BuiltinID, TheCall)) in CheckBuiltinFunctionCall()
998 if (SemaBuiltinVAStartARMMicrosoft(TheCall)) in CheckBuiltinFunctionCall()
1002 if (SemaBuiltinVAStart(BuiltinID, TheCall)) in CheckBuiltinFunctionCall()
1017 *this, BuiltinID, TheCall, in CheckBuiltinFunctionCall()
1029 if (CheckBuiltinTargetSupport(*this, BuiltinID, TheCall, in CheckBuiltinFunctionCall()
1041 if (SemaBuiltinUnorderedCompare(TheCall)) in CheckBuiltinFunctionCall()
1045 if (SemaBuiltinFPClassification(TheCall, 6)) in CheckBuiltinFunctionCall()
1056 if (SemaBuiltinFPClassification(TheCall, 1)) in CheckBuiltinFunctionCall()
1060 return SemaBuiltinShuffleVector(TheCall); in CheckBuiltinFunctionCall()
1064 if (SemaBuiltinPrefetch(TheCall)) in CheckBuiltinFunctionCall()
1068 if (SemaBuiltinAllocaWithAlign(TheCall)) in CheckBuiltinFunctionCall()
1073 if (SemaBuiltinAssume(TheCall)) in CheckBuiltinFunctionCall()
1077 if (SemaBuiltinAssumeAligned(TheCall)) in CheckBuiltinFunctionCall()
1081 if (SemaBuiltinConstantArgRange(TheCall, 1, 0, 3)) in CheckBuiltinFunctionCall()
1085 if (SemaBuiltinLongjmp(TheCall)) in CheckBuiltinFunctionCall()
1089 if (SemaBuiltinSetjmp(TheCall)) in CheckBuiltinFunctionCall()
1094 if (checkArgCount(*this, TheCall, 1)) in CheckBuiltinFunctionCall()
1098 if (checkArgCount(*this, TheCall, 1)) return true; in CheckBuiltinFunctionCall()
1099 TheCall->setType(Context.IntTy); in CheckBuiltinFunctionCall()
1102 if (checkArgCount(*this, TheCall, 1)) return true; in CheckBuiltinFunctionCall()
1103 TheCall->setType(Context.IntTy); in CheckBuiltinFunctionCall()
1106 return SemaBuiltinLaunder(*this, TheCall); in CheckBuiltinFunctionCall()
1211 Diag(TheCall->getBeginLoc(), diag::warn_atomic_implicit_seq_cst) in CheckBuiltinFunctionCall()
1212 << TheCall->getCallee()->getSourceRange(); in CheckBuiltinFunctionCall()
1223 if (SemaBuiltinMSVCAnnotation(*this, TheCall)) in CheckBuiltinFunctionCall()
1227 if (SemaBuiltinAnnotation(*this, TheCall)) in CheckBuiltinFunctionCall()
1231 if (SemaBuiltinAddressof(*this, TheCall)) in CheckBuiltinFunctionCall()
1237 if (SemaBuiltinOverflow(*this, TheCall)) in CheckBuiltinFunctionCall()
1251 if (checkArgCount(*this, TheCall, 2)) in CheckBuiltinFunctionCall()
1254 const Expr *PtrArg = TheCall->getArg(0)->IgnoreParenImpCasts(); in CheckBuiltinFunctionCall()
1265 const Expr *FnPtrArg = TheCall->getArg(1)->IgnoreImpCasts(); in CheckBuiltinFunctionCall()
1302 TheCall->setType(Context.IntTy); in CheckBuiltinFunctionCall()
1309 SemaBuiltinMemChkCall(*this, FDecl, TheCall, 2, 3, "memcpy"); in CheckBuiltinFunctionCall()
1312 SemaBuiltinMemChkCall(*this, FDecl, TheCall, 2, 3, "memmove"); in CheckBuiltinFunctionCall()
1315 SemaBuiltinMemChkCall(*this, FDecl, TheCall, 2, 3, "memset"); in CheckBuiltinFunctionCall()
1318 SemaBuiltinMemChkCall(*this, FDecl, TheCall, 2, 3, "strlcat"); in CheckBuiltinFunctionCall()
1321 SemaBuiltinMemChkCall(*this, FDecl, TheCall, 2, 3, "strlcpy"); in CheckBuiltinFunctionCall()
1324 SemaBuiltinMemChkCall(*this, FDecl, TheCall, 2, 3, "strncat"); in CheckBuiltinFunctionCall()
1327 SemaBuiltinMemChkCall(*this, FDecl, TheCall, 2, 3, "strncpy"); in CheckBuiltinFunctionCall()
1330 SemaBuiltinMemChkCall(*this, FDecl, TheCall, 2, 3, "stpncpy"); in CheckBuiltinFunctionCall()
1333 SemaBuiltinMemChkCall(*this, FDecl, TheCall, 3, 4, "memccpy"); in CheckBuiltinFunctionCall()
1336 SemaBuiltinMemChkCall(*this, FDecl, TheCall, 1, 3, "snprintf"); in CheckBuiltinFunctionCall()
1339 SemaBuiltinMemChkCall(*this, FDecl, TheCall, 1, 3, "vsnprintf"); in CheckBuiltinFunctionCall()
1342 if (SemaBuiltinCallWithStaticChain(*this, TheCall)) in CheckBuiltinFunctionCall()
1347 if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHExceptScope, in CheckBuiltinFunctionCall()
1353 if (SemaBuiltinSEHScopeCheck(*this, TheCall, Scope::SEHFilterScope, in CheckBuiltinFunctionCall()
1358 if (checkArgCount(*this, TheCall, 1)) in CheckBuiltinFunctionCall()
1362 TheCall->getBeginLoc(), in CheckBuiltinFunctionCall()
1364 TheCall)) in CheckBuiltinFunctionCall()
1367 TheCall->setType(Context.VoidPtrTy); in CheckBuiltinFunctionCall()
1374 if (SemaBuiltinRWPipe(*this, TheCall)) in CheckBuiltinFunctionCall()
1381 if (SemaBuiltinReserveRWPipe(*this, TheCall)) in CheckBuiltinFunctionCall()
1386 if (checkOpenCLSubgroupExt(*this, TheCall) || in CheckBuiltinFunctionCall()
1387 SemaBuiltinReserveRWPipe(*this, TheCall)) in CheckBuiltinFunctionCall()
1394 if (SemaBuiltinCommitRWPipe(*this, TheCall)) in CheckBuiltinFunctionCall()
1399 if (checkOpenCLSubgroupExt(*this, TheCall) || in CheckBuiltinFunctionCall()
1400 SemaBuiltinCommitRWPipe(*this, TheCall)) in CheckBuiltinFunctionCall()
1405 if (SemaBuiltinPipePackets(*this, TheCall)) in CheckBuiltinFunctionCall()
1411 if (SemaOpenCLBuiltinToAddr(*this, BuiltinID, TheCall)) in CheckBuiltinFunctionCall()
1416 if (SemaOpenCLBuiltinEnqueueKernel(*this, TheCall)) in CheckBuiltinFunctionCall()
1421 if (SemaOpenCLBuiltinKernelWorkGroupSize(*this, TheCall)) in CheckBuiltinFunctionCall()
1426 if (SemaOpenCLBuiltinNDRangeAndBlock(*this, TheCall)) in CheckBuiltinFunctionCall()
1431 if (SemaBuiltinOSLogFormat(TheCall)) in CheckBuiltinFunctionCall()
1444 if (CheckARMBuiltinFunctionCall(BuiltinID, TheCall)) in CheckBuiltinFunctionCall()
1449 if (CheckAArch64BuiltinFunctionCall(BuiltinID, TheCall)) in CheckBuiltinFunctionCall()
1453 if (CheckHexagonBuiltinFunctionCall(BuiltinID, TheCall)) in CheckBuiltinFunctionCall()
1460 if (CheckMipsBuiltinFunctionCall(BuiltinID, TheCall)) in CheckBuiltinFunctionCall()
1464 if (CheckSystemZBuiltinFunctionCall(BuiltinID, TheCall)) in CheckBuiltinFunctionCall()
1469 if (CheckX86BuiltinFunctionCall(BuiltinID, TheCall)) in CheckBuiltinFunctionCall()
1475 if (CheckPPCBuiltinFunctionCall(BuiltinID, TheCall)) in CheckBuiltinFunctionCall()
1556 bool Sema::CheckNeonBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { in CheckNeonBuiltinFunctionCall() argument
1571 unsigned ImmArg = TheCall->getNumArgs()-1; in CheckNeonBuiltinFunctionCall()
1573 if (SemaBuiltinConstantArg(TheCall, ImmArg, Result)) in CheckNeonBuiltinFunctionCall()
1578 return Diag(TheCall->getBeginLoc(), diag::err_invalid_neon_type_code) in CheckNeonBuiltinFunctionCall()
1579 << TheCall->getArg(ImmArg)->getSourceRange(); in CheckNeonBuiltinFunctionCall()
1584 Expr *Arg = TheCall->getArg(PtrArgNum); in CheckNeonBuiltinFunctionCall()
1621 return SemaBuiltinConstantArgRange(TheCall, i, l, u + l); in CheckNeonBuiltinFunctionCall()
1624 bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall, in CheckARMBuiltinExclusiveCall() argument
1640 DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts()); in CheckARMBuiltinExclusiveCall()
1643 if (checkArgCount(*this, TheCall, IsLdrex ? 1 : 2)) in CheckARMBuiltinExclusiveCall()
1650 Expr *PointerArg = TheCall->getArg(IsLdrex ? 0 : 1); in CheckARMBuiltinExclusiveCall()
1687 TheCall->setArg(IsLdrex ? 0 : 1, PointerArg); in CheckARMBuiltinExclusiveCall()
1720 TheCall->setType(ValType); in CheckARMBuiltinExclusiveCall()
1725 ExprResult ValArg = TheCall->getArg(0); in CheckARMBuiltinExclusiveCall()
1731 TheCall->setArg(0, ValArg.get()); in CheckARMBuiltinExclusiveCall()
1735 TheCall->setType(Context.IntTy); in CheckARMBuiltinExclusiveCall()
1739 bool Sema::CheckARMBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { in CheckARMBuiltinFunctionCall() argument
1744 return CheckARMBuiltinExclusiveCall(BuiltinID, TheCall, 64); in CheckARMBuiltinFunctionCall()
1748 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1) || in CheckARMBuiltinFunctionCall()
1749 SemaBuiltinConstantArgRange(TheCall, 2, 0, 1); in CheckARMBuiltinFunctionCall()
1754 return SemaBuiltinARMSpecialReg(BuiltinID, TheCall, 0, 3, false); in CheckARMBuiltinFunctionCall()
1760 return SemaBuiltinARMSpecialReg(BuiltinID, TheCall, 0, 5, true); in CheckARMBuiltinFunctionCall()
1762 if (CheckNeonBuiltinFunctionCall(BuiltinID, TheCall)) in CheckARMBuiltinFunctionCall()
1771 return SemaBuiltinConstantArgRange(TheCall, 1, 1, 32); in CheckARMBuiltinFunctionCall()
1773 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 31); in CheckARMBuiltinFunctionCall()
1775 return SemaBuiltinConstantArgRange(TheCall, 1, 1, 16); in CheckARMBuiltinFunctionCall()
1777 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 15); in CheckARMBuiltinFunctionCall()
1780 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1); in CheckARMBuiltinFunctionCall()
1785 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 15); in CheckARMBuiltinFunctionCall()
1790 CallExpr *TheCall) { in CheckAArch64BuiltinFunctionCall() argument
1795 return CheckARMBuiltinExclusiveCall(BuiltinID, TheCall, 128); in CheckAArch64BuiltinFunctionCall()
1799 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1) || in CheckAArch64BuiltinFunctionCall()
1800 SemaBuiltinConstantArgRange(TheCall, 2, 0, 2) || in CheckAArch64BuiltinFunctionCall()
1801 SemaBuiltinConstantArgRange(TheCall, 3, 0, 1) || in CheckAArch64BuiltinFunctionCall()
1802 SemaBuiltinConstantArgRange(TheCall, 4, 0, 1); in CheckAArch64BuiltinFunctionCall()
1807 return SemaBuiltinARMSpecialReg(BuiltinID, TheCall, 0, 5, true); in CheckAArch64BuiltinFunctionCall()
1813 return SemaBuiltinARMSpecialReg(BuiltinID, TheCall, 0, 5, true); in CheckAArch64BuiltinFunctionCall()
1820 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 0x7fff); in CheckAArch64BuiltinFunctionCall()
1823 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 31); in CheckAArch64BuiltinFunctionCall()
1825 if (CheckNeonBuiltinFunctionCall(BuiltinID, TheCall)) in CheckAArch64BuiltinFunctionCall()
1838 return SemaBuiltinConstantArgRange(TheCall, i, l, u + l); in CheckAArch64BuiltinFunctionCall()
1841 bool Sema::CheckHexagonBuiltinCpu(unsigned BuiltinID, CallExpr *TheCall) { in CheckHexagonBuiltinCpu() argument
2634 return Diag(TheCall->getBeginLoc(), in CheckHexagonBuiltinCpu()
2644 return Diag(TheCall->getBeginLoc(), in CheckHexagonBuiltinCpu()
2655 return Diag(TheCall->getBeginLoc(), in CheckHexagonBuiltinCpu()
2662 bool Sema::CheckHexagonBuiltinArgument(unsigned BuiltinID, CallExpr *TheCall) { in CheckHexagonBuiltinArgument() argument
2888 Error |= SemaBuiltinConstantArgRange(TheCall, A.OpNum, Min, Max); in CheckHexagonBuiltinArgument()
2893 Error |= SemaBuiltinConstantArgRange(TheCall, A.OpNum, Min, Max) | in CheckHexagonBuiltinArgument()
2894 SemaBuiltinConstantArgMultiple(TheCall, A.OpNum, M); in CheckHexagonBuiltinArgument()
2901 CallExpr *TheCall) { in CheckHexagonBuiltinFunctionCall() argument
2902 return CheckHexagonBuiltinCpu(BuiltinID, TheCall) || in CheckHexagonBuiltinFunctionCall()
2903 CheckHexagonBuiltinArgument(BuiltinID, TheCall); in CheckHexagonBuiltinFunctionCall()
2916 bool Sema::CheckMipsBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { in CheckMipsBuiltinFunctionCall() argument
3081 return SemaBuiltinConstantArgRange(TheCall, i, l, u); in CheckMipsBuiltinFunctionCall()
3083 return SemaBuiltinConstantArgRange(TheCall, i, l, u) || in CheckMipsBuiltinFunctionCall()
3084 SemaBuiltinConstantArgMultiple(TheCall, i, m); in CheckMipsBuiltinFunctionCall()
3087 bool Sema::CheckPPCBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { in CheckPPCBuiltinFunctionCall() argument
3102 return Diag(TheCall->getBeginLoc(), diag::err_64_bit_builtin_32_bit_tgt) in CheckPPCBuiltinFunctionCall()
3103 << TheCall->getSourceRange(); in CheckPPCBuiltinFunctionCall()
3108 return Diag(TheCall->getBeginLoc(), diag::err_ppc_builtin_only_on_pwr7) in CheckPPCBuiltinFunctionCall()
3109 << TheCall->getSourceRange(); in CheckPPCBuiltinFunctionCall()
3111 auto SemaVSXCheck = [&](CallExpr *TheCall) -> bool { in CheckPPCBuiltinFunctionCall() argument
3113 return Diag(TheCall->getBeginLoc(), diag::err_ppc_builtin_only_on_pwr7) in CheckPPCBuiltinFunctionCall()
3114 << TheCall->getSourceRange(); in CheckPPCBuiltinFunctionCall()
3122 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 1) || in CheckPPCBuiltinFunctionCall()
3123 SemaBuiltinConstantArgRange(TheCall, 2, 0, 15); in CheckPPCBuiltinFunctionCall()
3131 return SemaBuiltinConstantArgRange(TheCall, 0, 0, 31) || in CheckPPCBuiltinFunctionCall()
3132 SemaBuiltinConstantArgRange(TheCall, 2, 0, 31); in CheckPPCBuiltinFunctionCall()
3135 return SemaBuiltinVSX(TheCall); in CheckPPCBuiltinFunctionCall()
3137 return SemaVSXCheck(TheCall) || in CheckPPCBuiltinFunctionCall()
3138 SemaBuiltinConstantArgRange(TheCall, 1, 0, 1); in CheckPPCBuiltinFunctionCall()
3140 return SemaVSXCheck(TheCall); in CheckPPCBuiltinFunctionCall()
3142 return SemaBuiltinConstantArgRange(TheCall, i, l, u); in CheckPPCBuiltinFunctionCall()
3146 CallExpr *TheCall) { in CheckSystemZBuiltinFunctionCall() argument
3148 Expr *Arg = TheCall->getArg(0); in CheckSystemZBuiltinFunctionCall()
3180 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 15) || in CheckSystemZBuiltinFunctionCall()
3181 SemaBuiltinConstantArgRange(TheCall, 2, 0, 15); in CheckSystemZBuiltinFunctionCall()
3205 return SemaBuiltinConstantArgRange(TheCall, i, l, u); in CheckSystemZBuiltinFunctionCall()
3211 static bool SemaBuiltinCpuSupports(Sema &S, CallExpr *TheCall) { in SemaBuiltinCpuSupports() argument
3212 Expr *Arg = TheCall->getArg(0); in SemaBuiltinCpuSupports()
3216 return S.Diag(TheCall->getBeginLoc(), diag::err_expr_not_string_literal) in SemaBuiltinCpuSupports()
3223 return S.Diag(TheCall->getBeginLoc(), diag::err_invalid_cpu_supports) in SemaBuiltinCpuSupports()
3231 static bool SemaBuiltinCpuIs(Sema &S, CallExpr *TheCall) { in SemaBuiltinCpuIs() argument
3232 Expr *Arg = TheCall->getArg(0); in SemaBuiltinCpuIs()
3236 return S.Diag(TheCall->getBeginLoc(), diag::err_expr_not_string_literal) in SemaBuiltinCpuIs()
3243 return S.Diag(TheCall->getBeginLoc(), diag::err_invalid_cpu_is) in SemaBuiltinCpuIs()
3249 bool Sema::CheckX86BuiltinRoundingOrSAE(unsigned BuiltinID, CallExpr *TheCall) { in CheckX86BuiltinRoundingOrSAE() argument
3430 Expr *Arg = TheCall->getArg(ArgNum); in CheckX86BuiltinRoundingOrSAE()
3435 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in CheckX86BuiltinRoundingOrSAE()
3446 return Diag(TheCall->getBeginLoc(), diag::err_x86_builtin_invalid_rounding) in CheckX86BuiltinRoundingOrSAE()
3452 CallExpr *TheCall) { in CheckX86BuiltinGatherScatterScale() argument
3538 Expr *Arg = TheCall->getArg(ArgNum); in CheckX86BuiltinGatherScatterScale()
3543 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in CheckX86BuiltinGatherScatterScale()
3549 return Diag(TheCall->getBeginLoc(), diag::err_x86_builtin_invalid_scale) in CheckX86BuiltinGatherScatterScale()
3564 bool Sema::CheckX86BuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { in CheckX86BuiltinFunctionCall() argument
3566 return SemaBuiltinCpuSupports(*this, TheCall); in CheckX86BuiltinFunctionCall()
3569 return SemaBuiltinCpuIs(*this, TheCall); in CheckX86BuiltinFunctionCall()
3574 return Diag(TheCall->getCallee()->getBeginLoc(), in CheckX86BuiltinFunctionCall()
3578 if (CheckX86BuiltinRoundingOrSAE(BuiltinID, TheCall)) in CheckX86BuiltinFunctionCall()
3582 if (CheckX86BuiltinGatherScatterScale(BuiltinID, TheCall)) in CheckX86BuiltinFunctionCall()
3919 return SemaBuiltinConstantArgRange(TheCall, i, l, u, /*RangeIsError*/ false); in CheckX86BuiltinFunctionCall()
4207 bool Sema::CheckFunctionCall(FunctionDecl *FDecl, CallExpr *TheCall, in CheckFunctionCall() argument
4209 bool IsMemberOperatorCall = isa<CXXOperatorCallExpr>(TheCall) && in CheckFunctionCall()
4211 bool IsMemberFunction = isa<CXXMemberCallExpr>(TheCall) || in CheckFunctionCall()
4214 TheCall->getCallee()); in CheckFunctionCall()
4215 Expr** Args = TheCall->getArgs(); in CheckFunctionCall()
4216 unsigned NumArgs = TheCall->getNumArgs(); in CheckFunctionCall()
4228 cast<CXXMemberCallExpr>(TheCall)->getImplicitObjectArgument(); in CheckFunctionCall()
4231 IsMemberFunction, TheCall->getRParenLoc(), in CheckFunctionCall()
4232 TheCall->getCallee()->getSourceRange(), CallType); in CheckFunctionCall()
4240 CheckAbsoluteValueFunction(TheCall, FDecl); in CheckFunctionCall()
4241 CheckMaxUnsignedZero(TheCall, FDecl); in CheckFunctionCall()
4252 CheckStrlcpycatArguments(TheCall, FnInfo); in CheckFunctionCall()
4254 CheckStrncatArguments(TheCall, FnInfo); in CheckFunctionCall()
4256 CheckMemaccessArguments(TheCall, CMId, FnInfo); in CheckFunctionCall()
4273 bool Sema::CheckPointerCall(NamedDecl *NDecl, CallExpr *TheCall, in CheckPointerCall() argument
4297 llvm::makeArrayRef(TheCall->getArgs(), TheCall->getNumArgs()), in CheckPointerCall()
4298 /*IsMemberFunction=*/false, TheCall->getRParenLoc(), in CheckPointerCall()
4299 TheCall->getCallee()->getSourceRange(), CallType); in CheckPointerCall()
4306 bool Sema::CheckOtherCall(CallExpr *TheCall, const FunctionProtoType *Proto) { in CheckOtherCall() argument
4308 TheCall->getCallee()); in CheckOtherCall()
4310 llvm::makeArrayRef(TheCall->getArgs(), TheCall->getNumArgs()), in CheckOtherCall()
4311 /*IsMemberFunction=*/false, TheCall->getRParenLoc(), in CheckOtherCall()
4312 TheCall->getCallee()->getSourceRange(), CallType); in CheckOtherCall()
4349 CallExpr *TheCall = cast<CallExpr>(TheCallResult.get()); in SemaAtomicOpsOverloaded() local
4350 DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts()); in SemaAtomicOpsOverloaded()
4498 if (TheCall->getNumArgs() < AdjustedNumArgs) { in SemaAtomicOpsOverloaded()
4499 Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args) in SemaAtomicOpsOverloaded()
4500 << 0 << AdjustedNumArgs << TheCall->getNumArgs() in SemaAtomicOpsOverloaded()
4501 << TheCall->getCallee()->getSourceRange(); in SemaAtomicOpsOverloaded()
4503 } else if (TheCall->getNumArgs() > AdjustedNumArgs) { in SemaAtomicOpsOverloaded()
4504 Diag(TheCall->getArg(AdjustedNumArgs)->getBeginLoc(), in SemaAtomicOpsOverloaded()
4506 << 0 << AdjustedNumArgs << TheCall->getNumArgs() in SemaAtomicOpsOverloaded()
4507 << TheCall->getCallee()->getSourceRange(); in SemaAtomicOpsOverloaded()
4512 Expr *Ptr = TheCall->getArg(0); in SemaAtomicOpsOverloaded()
4637 for (unsigned i = 0; i != TheCall->getNumArgs(); ++i) { in SemaAtomicOpsOverloaded()
4644 CheckNonNullArgument(*this, TheCall->getArg(i), DRE->getBeginLoc()); in SemaAtomicOpsOverloaded()
4658 CheckNonNullArgument(*this, TheCall->getArg(i), DRE->getBeginLoc()); in SemaAtomicOpsOverloaded()
4663 Expr *ValArg = TheCall->getArg(i); in SemaAtomicOpsOverloaded()
4680 CheckNonNullArgument(*this, TheCall->getArg(i), DRE->getBeginLoc()); in SemaAtomicOpsOverloaded()
4695 ExprResult Arg = TheCall->getArg(i); in SemaAtomicOpsOverloaded()
4699 TheCall->setArg(i, Arg.get()); in SemaAtomicOpsOverloaded()
4708 SubExprs.push_back(TheCall->getArg(1)); // Val1 in SemaAtomicOpsOverloaded()
4711 SubExprs.push_back(TheCall->getArg(1)); // Order in SemaAtomicOpsOverloaded()
4717 SubExprs.push_back(TheCall->getArg(2)); // Order in SemaAtomicOpsOverloaded()
4718 SubExprs.push_back(TheCall->getArg(1)); // Val1 in SemaAtomicOpsOverloaded()
4722 SubExprs.push_back(TheCall->getArg(3)); // Order in SemaAtomicOpsOverloaded()
4723 SubExprs.push_back(TheCall->getArg(1)); // Val1 in SemaAtomicOpsOverloaded()
4724 SubExprs.push_back(TheCall->getArg(2)); // Val2 in SemaAtomicOpsOverloaded()
4727 SubExprs.push_back(TheCall->getArg(3)); // Order in SemaAtomicOpsOverloaded()
4728 SubExprs.push_back(TheCall->getArg(1)); // Val1 in SemaAtomicOpsOverloaded()
4729 SubExprs.push_back(TheCall->getArg(4)); // OrderFail in SemaAtomicOpsOverloaded()
4730 SubExprs.push_back(TheCall->getArg(2)); // Val2 in SemaAtomicOpsOverloaded()
4733 SubExprs.push_back(TheCall->getArg(4)); // Order in SemaAtomicOpsOverloaded()
4734 SubExprs.push_back(TheCall->getArg(1)); // Val1 in SemaAtomicOpsOverloaded()
4735 SubExprs.push_back(TheCall->getArg(5)); // OrderFail in SemaAtomicOpsOverloaded()
4736 SubExprs.push_back(TheCall->getArg(2)); // Val2 in SemaAtomicOpsOverloaded()
4737 SubExprs.push_back(TheCall->getArg(3)); // Weak in SemaAtomicOpsOverloaded()
4751 auto *Scope = TheCall->getArg(TheCall->getNumArgs() - 1); in SemaAtomicOpsOverloaded()
4762 new (Context) AtomicExpr(TheCall->getCallee()->getBeginLoc(), SubExprs, in SemaAtomicOpsOverloaded()
4763 ResultType, Op, TheCall->getRParenLoc()); in SemaAtomicOpsOverloaded()
4812 CallExpr *TheCall = static_cast<CallExpr *>(TheCallResult.get()); in SemaBuiltinAtomicOverloaded() local
4813 Expr *Callee = TheCall->getCallee(); in SemaBuiltinAtomicOverloaded()
4818 if (TheCall->getNumArgs() < 1) { in SemaBuiltinAtomicOverloaded()
4819 Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) in SemaBuiltinAtomicOverloaded()
4820 << 0 << 1 << TheCall->getNumArgs() << Callee->getSourceRange(); in SemaBuiltinAtomicOverloaded()
4829 Expr *FirstArg = TheCall->getArg(0); in SemaBuiltinAtomicOverloaded()
4834 TheCall->setArg(0, FirstArg); in SemaBuiltinAtomicOverloaded()
5094 if (TheCall->getNumArgs() < 1+NumFixed) { in SemaBuiltinAtomicOverloaded()
5095 Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args_at_least) in SemaBuiltinAtomicOverloaded()
5096 << 0 << 1 + NumFixed << TheCall->getNumArgs() in SemaBuiltinAtomicOverloaded()
5101 Diag(TheCall->getEndLoc(), diag::warn_atomic_implicit_seq_cst) in SemaBuiltinAtomicOverloaded()
5105 Diag(TheCall->getEndLoc(), diag::warn_sync_fetch_and_nand_semantics_change) in SemaBuiltinAtomicOverloaded()
5131 ExprResult Arg = TheCall->getArg(i+1); in SemaBuiltinAtomicOverloaded()
5148 TheCall->setArg(i+1, Arg.get()); in SemaBuiltinAtomicOverloaded()
5167 TheCall->setCallee(PromotedCall.get()); in SemaBuiltinAtomicOverloaded()
5172 TheCall->setType(ResultType); in SemaBuiltinAtomicOverloaded()
5184 CallExpr *TheCall = (CallExpr *)TheCallResult.get(); in SemaBuiltinNontemporalOverloaded() local
5186 cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts()); in SemaBuiltinNontemporalOverloaded()
5196 if (checkArgCount(*this, TheCall, numArgs)) in SemaBuiltinNontemporalOverloaded()
5203 Expr *PointerArg = TheCall->getArg(numArgs - 1); in SemaBuiltinNontemporalOverloaded()
5210 TheCall->setArg(numArgs - 1, PointerArg); in SemaBuiltinNontemporalOverloaded()
5233 TheCall->setType(ValType); in SemaBuiltinNontemporalOverloaded()
5237 ExprResult ValArg = TheCall->getArg(0); in SemaBuiltinNontemporalOverloaded()
5244 TheCall->setArg(0, ValArg.get()); in SemaBuiltinNontemporalOverloaded()
5245 TheCall->setType(Context.VoidTy); in SemaBuiltinNontemporalOverloaded()
5383 bool Sema::SemaBuiltinVAStart(unsigned BuiltinID, CallExpr *TheCall) { in SemaBuiltinVAStart() argument
5384 Expr *Fn = TheCall->getCallee(); in SemaBuiltinVAStart()
5389 if (TheCall->getNumArgs() > 2) { in SemaBuiltinVAStart()
5390 Diag(TheCall->getArg(2)->getBeginLoc(), in SemaBuiltinVAStart()
5392 << 0 /*function call*/ << 2 << TheCall->getNumArgs() in SemaBuiltinVAStart()
5394 << SourceRange(TheCall->getArg(2)->getBeginLoc(), in SemaBuiltinVAStart()
5395 (*(TheCall->arg_end() - 1))->getEndLoc()); in SemaBuiltinVAStart()
5399 if (TheCall->getNumArgs() < 2) { in SemaBuiltinVAStart()
5400 return Diag(TheCall->getEndLoc(), in SemaBuiltinVAStart()
5402 << 0 /*function call*/ << 2 << TheCall->getNumArgs(); in SemaBuiltinVAStart()
5406 if (checkBuiltinArgument(*this, TheCall, 0)) in SemaBuiltinVAStart()
5417 const Expr *Arg = TheCall->getArg(1)->IgnoreParenCasts(); in SemaBuiltinVAStart()
5437 Diag(TheCall->getArg(1)->getBeginLoc(), in SemaBuiltinVAStart()
5458 TheCall->setType(Context.VoidTy); in SemaBuiltinVAStart()
5512 bool Sema::SemaBuiltinUnorderedCompare(CallExpr *TheCall) { in SemaBuiltinUnorderedCompare() argument
5513 if (TheCall->getNumArgs() < 2) in SemaBuiltinUnorderedCompare()
5514 return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args) in SemaBuiltinUnorderedCompare()
5515 << 0 << 2 << TheCall->getNumArgs() /*function call*/; in SemaBuiltinUnorderedCompare()
5516 if (TheCall->getNumArgs() > 2) in SemaBuiltinUnorderedCompare()
5517 return Diag(TheCall->getArg(2)->getBeginLoc(), in SemaBuiltinUnorderedCompare()
5519 << 0 /*function call*/ << 2 << TheCall->getNumArgs() in SemaBuiltinUnorderedCompare()
5520 << SourceRange(TheCall->getArg(2)->getBeginLoc(), in SemaBuiltinUnorderedCompare()
5521 (*(TheCall->arg_end() - 1))->getEndLoc()); in SemaBuiltinUnorderedCompare()
5523 ExprResult OrigArg0 = TheCall->getArg(0); in SemaBuiltinUnorderedCompare()
5524 ExprResult OrigArg1 = TheCall->getArg(1); in SemaBuiltinUnorderedCompare()
5535 TheCall->setArg(0, OrigArg0.get()); in SemaBuiltinUnorderedCompare()
5536 TheCall->setArg(1, OrigArg1.get()); in SemaBuiltinUnorderedCompare()
5557 bool Sema::SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs) { in SemaBuiltinFPClassification() argument
5558 if (TheCall->getNumArgs() < NumArgs) in SemaBuiltinFPClassification()
5559 return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args) in SemaBuiltinFPClassification()
5560 << 0 << NumArgs << TheCall->getNumArgs() /*function call*/; in SemaBuiltinFPClassification()
5561 if (TheCall->getNumArgs() > NumArgs) in SemaBuiltinFPClassification()
5562 return Diag(TheCall->getArg(NumArgs)->getBeginLoc(), in SemaBuiltinFPClassification()
5564 << 0 /*function call*/ << NumArgs << TheCall->getNumArgs() in SemaBuiltinFPClassification()
5565 << SourceRange(TheCall->getArg(NumArgs)->getBeginLoc(), in SemaBuiltinFPClassification()
5566 (*(TheCall->arg_end() - 1))->getEndLoc()); in SemaBuiltinFPClassification()
5568 Expr *OrigArg = TheCall->getArg(NumArgs-1); in SemaBuiltinFPClassification()
5593 TheCall->setArg(NumArgs-1, CastArg); in SemaBuiltinFPClassification()
5608 bool Sema::SemaBuiltinVSX(CallExpr *TheCall) { in SemaBuiltinVSX() argument
5610 if (TheCall->getNumArgs() < ExpectedNumArgs) in SemaBuiltinVSX()
5611 return Diag(TheCall->getEndLoc(), in SemaBuiltinVSX()
5613 << 0 /*function call*/ << ExpectedNumArgs << TheCall->getNumArgs() in SemaBuiltinVSX()
5614 << TheCall->getSourceRange(); in SemaBuiltinVSX()
5616 if (TheCall->getNumArgs() > ExpectedNumArgs) in SemaBuiltinVSX()
5617 return Diag(TheCall->getEndLoc(), in SemaBuiltinVSX()
5619 << 0 /*function call*/ << ExpectedNumArgs << TheCall->getNumArgs() in SemaBuiltinVSX()
5620 << TheCall->getSourceRange(); in SemaBuiltinVSX()
5624 if(!TheCall->getArg(2)->isIntegerConstantExpr(Value, Context)) in SemaBuiltinVSX()
5625 return Diag(TheCall->getBeginLoc(), in SemaBuiltinVSX()
5627 << 3 /* argument index */ << TheCall->getDirectCallee() in SemaBuiltinVSX()
5628 << SourceRange(TheCall->getArg(2)->getBeginLoc(), in SemaBuiltinVSX()
5629 TheCall->getArg(2)->getEndLoc()); in SemaBuiltinVSX()
5631 QualType Arg1Ty = TheCall->getArg(0)->getType(); in SemaBuiltinVSX()
5632 QualType Arg2Ty = TheCall->getArg(1)->getType(); in SemaBuiltinVSX()
5635 SourceLocation BuiltinLoc = TheCall->getBeginLoc(); in SemaBuiltinVSX()
5639 << TheCall->getDirectCallee() in SemaBuiltinVSX()
5640 << SourceRange(TheCall->getArg(0)->getBeginLoc(), in SemaBuiltinVSX()
5641 TheCall->getArg(1)->getEndLoc()); in SemaBuiltinVSX()
5647 << TheCall->getDirectCallee() in SemaBuiltinVSX()
5648 << SourceRange(TheCall->getArg(0)->getBeginLoc(), in SemaBuiltinVSX()
5649 TheCall->getArg(1)->getEndLoc()); in SemaBuiltinVSX()
5655 TheCall->setType(Arg1Ty); in SemaBuiltinVSX()
5662 ExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) { in SemaBuiltinShuffleVector() argument
5663 if (TheCall->getNumArgs() < 2) in SemaBuiltinShuffleVector()
5664 return ExprError(Diag(TheCall->getEndLoc(), in SemaBuiltinShuffleVector()
5666 << 0 /*function call*/ << 2 << TheCall->getNumArgs() in SemaBuiltinShuffleVector()
5667 << TheCall->getSourceRange()); in SemaBuiltinShuffleVector()
5672 QualType resType = TheCall->getArg(0)->getType(); in SemaBuiltinShuffleVector()
5675 if (!TheCall->getArg(0)->isTypeDependent() && in SemaBuiltinShuffleVector()
5676 !TheCall->getArg(1)->isTypeDependent()) { in SemaBuiltinShuffleVector()
5677 QualType LHSType = TheCall->getArg(0)->getType(); in SemaBuiltinShuffleVector()
5678 QualType RHSType = TheCall->getArg(1)->getType(); in SemaBuiltinShuffleVector()
5682 Diag(TheCall->getBeginLoc(), diag::err_vec_builtin_non_vector) in SemaBuiltinShuffleVector()
5683 << TheCall->getDirectCallee() in SemaBuiltinShuffleVector()
5684 << SourceRange(TheCall->getArg(0)->getBeginLoc(), in SemaBuiltinShuffleVector()
5685 TheCall->getArg(1)->getEndLoc())); in SemaBuiltinShuffleVector()
5688 unsigned numResElements = TheCall->getNumArgs() - 2; in SemaBuiltinShuffleVector()
5693 if (TheCall->getNumArgs() == 2) { in SemaBuiltinShuffleVector()
5696 return ExprError(Diag(TheCall->getBeginLoc(), in SemaBuiltinShuffleVector()
5698 << TheCall->getDirectCallee() in SemaBuiltinShuffleVector()
5699 << SourceRange(TheCall->getArg(1)->getBeginLoc(), in SemaBuiltinShuffleVector()
5700 TheCall->getArg(1)->getEndLoc())); in SemaBuiltinShuffleVector()
5702 return ExprError(Diag(TheCall->getBeginLoc(), in SemaBuiltinShuffleVector()
5704 << TheCall->getDirectCallee() in SemaBuiltinShuffleVector()
5705 << SourceRange(TheCall->getArg(0)->getBeginLoc(), in SemaBuiltinShuffleVector()
5706 TheCall->getArg(1)->getEndLoc())); in SemaBuiltinShuffleVector()
5714 for (unsigned i = 2; i < TheCall->getNumArgs(); i++) { in SemaBuiltinShuffleVector()
5715 if (TheCall->getArg(i)->isTypeDependent() || in SemaBuiltinShuffleVector()
5716 TheCall->getArg(i)->isValueDependent()) in SemaBuiltinShuffleVector()
5720 if (!TheCall->getArg(i)->isIntegerConstantExpr(Result, Context)) in SemaBuiltinShuffleVector()
5721 return ExprError(Diag(TheCall->getBeginLoc(), in SemaBuiltinShuffleVector()
5723 << TheCall->getArg(i)->getSourceRange()); in SemaBuiltinShuffleVector()
5730 return ExprError(Diag(TheCall->getBeginLoc(), in SemaBuiltinShuffleVector()
5732 << TheCall->getArg(i)->getSourceRange()); in SemaBuiltinShuffleVector()
5737 for (unsigned i = 0, e = TheCall->getNumArgs(); i != e; i++) { in SemaBuiltinShuffleVector()
5738 exprs.push_back(TheCall->getArg(i)); in SemaBuiltinShuffleVector()
5739 TheCall->setArg(i, nullptr); in SemaBuiltinShuffleVector()
5743 TheCall->getCallee()->getBeginLoc(), in SemaBuiltinShuffleVector()
5744 TheCall->getRParenLoc()); in SemaBuiltinShuffleVector()
5780 bool Sema::SemaBuiltinPrefetch(CallExpr *TheCall) { in SemaBuiltinPrefetch() argument
5781 unsigned NumArgs = TheCall->getNumArgs(); in SemaBuiltinPrefetch()
5784 return Diag(TheCall->getEndLoc(), in SemaBuiltinPrefetch()
5786 << 0 /*function call*/ << 3 << NumArgs << TheCall->getSourceRange(); in SemaBuiltinPrefetch()
5791 if (SemaBuiltinConstantArgRange(TheCall, i, 0, i == 1 ? 1 : 3)) in SemaBuiltinPrefetch()
5800 bool Sema::SemaBuiltinAssume(CallExpr *TheCall) { in SemaBuiltinAssume() argument
5801 Expr *Arg = TheCall->getArg(0); in SemaBuiltinAssume()
5807 << cast<FunctionDecl>(TheCall->getCalleeDecl())->getIdentifier(); in SemaBuiltinAssume()
5815 bool Sema::SemaBuiltinAllocaWithAlign(CallExpr *TheCall) { in SemaBuiltinAllocaWithAlign() argument
5817 Expr *Arg = TheCall->getArg(1); in SemaBuiltinAllocaWithAlign()
5825 Diag(TheCall->getBeginLoc(), diag::warn_alloca_align_alignof) in SemaBuiltinAllocaWithAlign()
5831 return Diag(TheCall->getBeginLoc(), diag::err_alignment_not_power_of_two) in SemaBuiltinAllocaWithAlign()
5835 return Diag(TheCall->getBeginLoc(), diag::err_alignment_too_small) in SemaBuiltinAllocaWithAlign()
5839 return Diag(TheCall->getBeginLoc(), diag::err_alignment_too_big) in SemaBuiltinAllocaWithAlign()
5848 bool Sema::SemaBuiltinAssumeAligned(CallExpr *TheCall) { in SemaBuiltinAssumeAligned() argument
5849 unsigned NumArgs = TheCall->getNumArgs(); in SemaBuiltinAssumeAligned()
5852 return Diag(TheCall->getEndLoc(), in SemaBuiltinAssumeAligned()
5854 << 0 /*function call*/ << 3 << NumArgs << TheCall->getSourceRange(); in SemaBuiltinAssumeAligned()
5857 Expr *Arg = TheCall->getArg(1); in SemaBuiltinAssumeAligned()
5862 if (SemaBuiltinConstantArg(TheCall, 1, Result)) in SemaBuiltinAssumeAligned()
5866 return Diag(TheCall->getBeginLoc(), diag::err_alignment_not_power_of_two) in SemaBuiltinAssumeAligned()
5871 ExprResult Arg(TheCall->getArg(2)); in SemaBuiltinAssumeAligned()
5876 TheCall->setArg(2, Arg.get()); in SemaBuiltinAssumeAligned()
5882 bool Sema::SemaBuiltinOSLogFormat(CallExpr *TheCall) { in SemaBuiltinOSLogFormat() argument
5884 cast<FunctionDecl>(TheCall->getCalleeDecl())->getBuiltinID(); in SemaBuiltinOSLogFormat()
5887 unsigned NumArgs = TheCall->getNumArgs(); in SemaBuiltinOSLogFormat()
5890 return Diag(TheCall->getEndLoc(), diag::err_typecheck_call_too_few_args) in SemaBuiltinOSLogFormat()
5892 << TheCall->getSourceRange(); in SemaBuiltinOSLogFormat()
5895 return Diag(TheCall->getEndLoc(), in SemaBuiltinOSLogFormat()
5898 << TheCall->getSourceRange(); in SemaBuiltinOSLogFormat()
5904 ExprResult Arg(TheCall->getArg(i)); in SemaBuiltinOSLogFormat()
5910 TheCall->setArg(i, Arg.get()); in SemaBuiltinOSLogFormat()
5917 ExprResult Arg = CheckOSLogFormatStringArg(TheCall->getArg(i)); in SemaBuiltinOSLogFormat()
5920 TheCall->setArg(i, Arg.get()); in SemaBuiltinOSLogFormat()
5928 TheCall->getArg(i), VariadicFunction, nullptr); in SemaBuiltinOSLogFormat()
5935 << TheCall->getSourceRange(); in SemaBuiltinOSLogFormat()
5937 TheCall->setArg(i, Arg.get()); in SemaBuiltinOSLogFormat()
5945 ArrayRef<const Expr *> Args(TheCall->getArgs(), TheCall->getNumArgs()); in SemaBuiltinOSLogFormat()
5948 VariadicFunction, TheCall->getBeginLoc(), SourceRange(), in SemaBuiltinOSLogFormat()
5955 TheCall->setType(Context.getSizeType()); in SemaBuiltinOSLogFormat()
5957 TheCall->setType(Context.VoidPtrTy); in SemaBuiltinOSLogFormat()
5964 bool Sema::SemaBuiltinConstantArg(CallExpr *TheCall, int ArgNum, in SemaBuiltinConstantArg() argument
5966 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinConstantArg()
5967 DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts()); in SemaBuiltinConstantArg()
5973 return Diag(TheCall->getBeginLoc(), diag::err_constant_integer_arg_type) in SemaBuiltinConstantArg()
5981 bool Sema::SemaBuiltinConstantArgRange(CallExpr *TheCall, int ArgNum, in SemaBuiltinConstantArgRange() argument
5986 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinConstantArgRange()
5991 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in SemaBuiltinConstantArgRange()
5996 return Diag(TheCall->getBeginLoc(), diag::err_argument_invalid_range) in SemaBuiltinConstantArgRange()
6001 DiagRuntimeBehavior(TheCall->getBeginLoc(), TheCall, in SemaBuiltinConstantArgRange()
6012 bool Sema::SemaBuiltinConstantArgMultiple(CallExpr *TheCall, int ArgNum, in SemaBuiltinConstantArgMultiple() argument
6017 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinConstantArgMultiple()
6022 if (SemaBuiltinConstantArg(TheCall, ArgNum, Result)) in SemaBuiltinConstantArgMultiple()
6026 return Diag(TheCall->getBeginLoc(), diag::err_argument_not_multiple) in SemaBuiltinConstantArgMultiple()
6034 bool Sema::SemaBuiltinARMSpecialReg(unsigned BuiltinID, CallExpr *TheCall, in SemaBuiltinARMSpecialReg() argument
6052 Expr *Arg = TheCall->getArg(ArgNum); in SemaBuiltinARMSpecialReg()
6058 return Diag(TheCall->getBeginLoc(), diag::err_expr_not_string_literal) in SemaBuiltinARMSpecialReg()
6067 return Diag(TheCall->getBeginLoc(), diag::err_arm_invalid_specialreg) in SemaBuiltinARMSpecialReg()
6109 return Diag(TheCall->getBeginLoc(), diag::err_arm_invalid_specialreg) in SemaBuiltinARMSpecialReg()
6118 if (TheCall->getNumArgs() != 2) in SemaBuiltinARMSpecialReg()
6126 return SemaBuiltinConstantArgRange(TheCall, 1, 0, 15); in SemaBuiltinARMSpecialReg()
6135 bool Sema::SemaBuiltinLongjmp(CallExpr *TheCall) { in SemaBuiltinLongjmp() argument
6137 return Diag(TheCall->getBeginLoc(), diag::err_builtin_longjmp_unsupported) in SemaBuiltinLongjmp()
6138 << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc()); in SemaBuiltinLongjmp()
6140 Expr *Arg = TheCall->getArg(1); in SemaBuiltinLongjmp()
6144 if (SemaBuiltinConstantArg(TheCall, 1, Result)) in SemaBuiltinLongjmp()
6148 return Diag(TheCall->getBeginLoc(), diag::err_builtin_longjmp_invalid_val) in SemaBuiltinLongjmp()
6156 bool Sema::SemaBuiltinSetjmp(CallExpr *TheCall) { in SemaBuiltinSetjmp() argument
6158 return Diag(TheCall->getBeginLoc(), diag::err_builtin_setjmp_unsupported) in SemaBuiltinSetjmp()
6159 << SourceRange(TheCall->getBeginLoc(), TheCall->getEndLoc()); in SemaBuiltinSetjmp()
10669 static void CheckImplicitArgumentConversions(Sema &S, CallExpr *TheCall, in CheckImplicitArgumentConversions() argument
10671 unsigned NumArgs = TheCall->getNumArgs(); in CheckImplicitArgumentConversions()
10673 Expr *CurrA = TheCall->getArg(i); in CheckImplicitArgumentConversions()
10678 IsImplicitBoolFloatConversion(S, TheCall->getArg(i - 1), false)); in CheckImplicitArgumentConversions()
10680 IsImplicitBoolFloatConversion(S, TheCall->getArg(i + 1), false)); in CheckImplicitArgumentConversions()