Home | History | Annotate | Download | only in Sema

Lines Matching defs:TheCall

72 static bool SemaBuiltinAnnotation(Sema &S, CallExpr *TheCall) {
73 if (checkArgCount(S, TheCall, 2))
77 Expr *ValArg = TheCall->getArg(0);
86 Expr *StrArg = TheCall->getArg(1)->IgnoreParenCasts();
94 TheCall->setType(Ty);
100 static bool SemaBuiltinAddressof(Sema &S, CallExpr *TheCall) {
101 if (checkArgCount(S, TheCall, 1))
104 ExprResult Arg(S.Owned(TheCall->getArg(0)));
105 QualType ResultType = S.CheckAddressOfOperand(Arg, TheCall->getLocStart());
109 TheCall->setArg(0, Arg.take());
110 TheCall->setType(ResultType);
115 Sema::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
116 ExprResult TheCallResult(Owned(TheCall));
131 if (SemaBuiltinConstantArg(TheCall, ArgNo, Result))
138 assert(TheCall->getNumArgs() == 1 &&
140 if (CheckObjCString(TheCall->getArg(0)))
145 if (SemaBuiltinVAStart(TheCall))
154 if (SemaBuiltinUnorderedCompare(TheCall))
158 if (SemaBuiltinFPClassification(TheCall, 6))
166 if (SemaBuiltinFPClassification(TheCall, 1))
170 return SemaBuiltinShuffleVector(TheCall);
171 // TheCall will be freed by the smart pointer here, but that's fine, since
174 if (SemaBuiltinPrefetch(TheCall))
178 if (SemaBuiltinObjectSize(TheCall))
182 if (SemaBuiltinLongjmp(TheCall))
187 if (checkArgCount(*this, TheCall, 1)) return true;
188 TheCall->setType(Context.IntTy);
191 if (checkArgCount(*this, TheCall, 1)) return true;
192 TheCall->setType(Context.IntTy);
291 if (SemaBuiltinAnnotation(*this, TheCall))
295 if (SemaBuiltinAddressof(*this, TheCall))
306 if (CheckARMBuiltinFunctionCall(BuiltinID, TheCall))
310 if (CheckAArch64BuiltinFunctionCall(BuiltinID, TheCall))
317 if (CheckMipsBuiltinFunctionCall(BuiltinID, TheCall))
384 CallExpr *TheCall) {
400 unsigned ImmArg = TheCall->getNumArgs() - 1;
402 if (SemaBuiltinConstantArg(TheCall, ImmArg, Result))
407 return Diag(TheCall->getLocStart(), diag::err_invalid_neon_type_code)
408 << TheCall->getArg(ImmArg)->getSourceRange();
413 Expr *Arg = TheCall->getArg(PtrArgNum);
444 if (TheCall->getArg(i)->isTypeDependent() ||
445 TheCall->getArg(i)->isValueDependent())
449 if (SemaBuiltinConstantArg(TheCall, i, Result))
455 return Diag(TheCall->getLocStart(), diag::err_argument_invalid_range)
456 << l << u + l << TheCall->getArg(i)->getSourceRange();
461 bool Sema::CheckARMBuiltinExclusiveCall(unsigned BuiltinID, CallExpr *TheCall) {
467 DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts());
470 if (checkArgCount(*this, TheCall, IsLdrex ? 1 : 2))
477 Expr *PointerArg = TheCall->getArg(IsLdrex ? 0 : 1);
515 TheCall->setArg(IsLdrex ? 0 : 1, PointerArg);
548 TheCall->setType(ValType);
553 ExprResult ValArg = TheCall->getArg(0);
560 TheCall->setArg(0, ValArg.get());
564 bool Sema::CheckARMBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
569 return CheckARMBuiltinExclusiveCall(BuiltinID, TheCall);
584 unsigned ImmArg = TheCall->getNumArgs()-1;
586 if (SemaBuiltinConstantArg(TheCall, ImmArg, Result))
591 return Diag(TheCall->getLocStart(), diag::err_invalid_neon_type_code)
592 << TheCall->getArg(ImmArg)->getSourceRange();
597 Expr *Arg = TheCall->getArg(PtrArgNum);
630 if (TheCall->getArg(i)->isTypeDependent() ||
631 TheCall->getArg(i)->isValueDependent())
635 if (SemaBuiltinConstantArg(TheCall, i, Result))
641 return Diag(TheCall->getLocStart(), diag::err_argument_invalid_range)
642 << l << u+l << TheCall->getArg(i)->getSourceRange();
648 bool Sema::CheckMipsBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) {
662 if (TheCall->getArg(i)->isTypeDependent() ||
663 TheCall->getArg(i)->isValueDependent())
668 if (SemaBuiltinConstantArg(TheCall, i, Result))
674 return Diag(TheCall->getLocStart(), diag::err_argument_invalid_range)
675 << l << u << TheCall->getArg(i)->getSourceRange();
772 bool Sema::CheckFunctionCall(FunctionDecl *FDecl, CallExpr *TheCall,
774 bool IsMemberOperatorCall = isa<CXXOperatorCallExpr>(TheCall) &&
776 bool IsMemberFunction = isa<CXXMemberCallExpr>(TheCall) ||
779 TheCall->getCallee());
781 Expr** Args = TheCall->getArgs();
782 unsigned NumArgs = TheCall->getNumArgs();
792 IsMemberFunction, TheCall->getRParenLoc(),
793 TheCall->getCallee()->getSourceRange(), CallType);
807 CheckStrlcpycatArguments(TheCall, FnInfo);
809 CheckStrncatArguments(TheCall, FnInfo);
811 CheckMemaccessArguments(TheCall, CMId, FnInfo);
828 bool Sema::CheckPointerCall(NamedDecl *NDecl, CallExpr *TheCall,
849 llvm::makeArrayRef<const Expr *>(TheCall->getArgs(),
850 TheCall->getNumArgs()),
852 TheCall->getRParenLoc(),
853 TheCall->getCallee()->getSourceRange(), CallType);
860 bool Sema::CheckOtherCall(CallExpr *TheCall, const FunctionProtoType *Proto) {
862 TheCall->getCallee());
866 llvm::makeArrayRef<const Expr *>(TheCall->getArgs(),
867 TheCall->getNumArgs()),
869 TheCall->getRParenLoc(),
870 TheCall->getCallee()->getSourceRange(), CallType);
877 CallExpr *TheCall = cast<CallExpr>(TheCallResult.get());
878 DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts());
979 if (TheCall->getNumArgs() < NumArgs[Form]) {
980 Diag(TheCall->getLocEnd(), diag::err_typecheck_call_too_few_args)
981 << 0 << NumArgs[Form] << TheCall->getNumArgs()
982 << TheCall->getCallee()->getSourceRange();
984 } else if (TheCall->getNumArgs() > NumArgs[Form]) {
985 Diag(TheCall->getArg(NumArgs[Form])->getLocStart(),
987 << 0 << NumArgs[Form] << TheCall->getNumArgs()
988 << TheCall->getCallee()->getSourceRange();
993 Expr *Ptr = TheCall->getArg(0);
1118 ExprResult Arg = TheCall->getArg(i);
1122 TheCall->setArg(i, Arg.get());
1131 SubExprs.push_back(TheCall->getArg(1)); // Val1
1134 SubExprs.push_back(TheCall->getArg(1)); // Order
1139 SubExprs.push_back(TheCall->getArg(2)); // Order
1140 SubExprs.push_back(TheCall->getArg(1)); // Val1
1144 SubExprs.push_back(TheCall->getArg(3)); // Order
1145 SubExprs.push_back(TheCall->getArg(1)); // Val1
1146 SubExprs.push_back(TheCall->getArg(2)); // Val2
1149 SubExprs.push_back(TheCall->getArg(3)); // Order
1150 SubExprs.push_back(TheCall->getArg(1)); // Val1
1151 SubExprs.push_back(TheCall->getArg(4)); // OrderFail
1152 SubExprs.push_back(TheCall->getArg(2)); // Val2
1155 SubExprs.push_back(TheCall->getArg(4)); // Order
1156 SubExprs.push_back(TheCall->getArg(1)); // Val1
1157 SubExprs.push_back(TheCall->getArg(5)); // OrderFail
1158 SubExprs.push_back(TheCall->getArg(2)); // Val2
1159 SubExprs.push_back(TheCall->getArg(3)); // Weak
1163 AtomicExpr *AE = new (Context) AtomicExpr(TheCall->getCallee()->getLocStart(),
1165 TheCall->getRParenLoc());
1211 CallExpr *TheCall = (CallExpr *)TheCallResult.get();
1212 DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts());
1216 if (TheCall->getNumArgs() < 1) {
1217 Diag(TheCall->getLocEnd(), diag::err_typecheck_call_too_few_args_at_least)
1218 << 0 << 1 << TheCall->getNumArgs()
1219 << TheCall->getCallee()->getSourceRange();
1228 Expr *FirstArg = TheCall->getArg(0);
1233 TheCall->setArg(0, FirstArg);
1464 if (TheCall->getNumArgs() < 1+NumFixed) {
1465 Diag(TheCall->getLocEnd(), diag::err_typecheck_call_too_few_args_at_least)
1466 << 0 << 1+NumFixed << TheCall->getNumArgs()
1467 << TheCall->getCallee()->getSourceRange();
1493 ExprResult Arg = TheCall->getArg(i+1);
1510 TheCall->setArg(i+1, Arg.take());
1531 TheCall->setCallee(PromotedCall.take());
1536 TheCall->setType(ResultType);
1575 bool Sema::SemaBuiltinVAStart(CallExpr *TheCall) {
1576 Expr *Fn = TheCall->getCallee();
1577 if (TheCall->getNumArgs() > 2) {
1578 Diag(TheCall->getArg(2)->getLocStart(),
1580 << 0 /*function call*/ << 2 << TheCall->getNumArgs()
1582 << SourceRange(TheCall->getArg(2)->getLocStart(),
1583 (*(TheCall->arg_end()-1))->getLocEnd());
1587 if (TheCall->getNumArgs() < 2) {
1588 return Diag(TheCall->getLocEnd(),
1590 << 0 /*function call*/ << 2 << TheCall->getNumArgs();
1594 if (checkBuiltinArgument(*this, TheCall, 0))
1615 const Expr *Arg = TheCall->getArg(1)->IgnoreParenCasts();
1641 Diag(TheCall->getArg(1)->getLocStart(),
1654 bool Sema::SemaBuiltinUnorderedCompare(CallExpr *TheCall) {
1655 if (TheCall->getNumArgs() < 2)
1656 return Diag(TheCall->getLocEnd(), diag::err_typecheck_call_too_few_args)
1657 << 0 << 2 << TheCall->getNumArgs()/*function call*/;
1658 if (TheCall->getNumArgs() > 2)
1659 return Diag(TheCall->getArg(2)->getLocStart(),
1661 << 0 /*function call*/ << 2 << TheCall->getNumArgs()
1662 << SourceRange(TheCall->getArg(2)->getLocStart(),
1663 (*(TheCall->arg_end()-1))->getLocEnd());
1665 ExprResult OrigArg0 = TheCall->getArg(0);
1666 ExprResult OrigArg1 = TheCall->getArg(1);
1677 TheCall->setArg(0, OrigArg0.get());
1678 TheCall->setArg(1, OrigArg1.get());
1698 bool Sema::SemaBuiltinFPClassification(CallExpr *TheCall, unsigned NumArgs) {
1699 if (TheCall->getNumArgs() < NumArgs)
1700 return Diag(TheCall->getLocEnd(), diag::err_typecheck_call_too_few_args)
1701 << 0 << NumArgs << TheCall->getNumArgs()/*function call*/;
1702 if (TheCall->getNumArgs() > NumArgs)
1703 return Diag(TheCall->getArg(NumArgs)->getLocStart(),
1705 << 0 /*function call*/ << NumArgs << TheCall->getNumArgs()
1706 << SourceRange(TheCall->getArg(NumArgs)->getLocStart(),
1707 (*(TheCall->arg_end()-1))->getLocEnd());
1709 Expr *OrigArg = TheCall->getArg(NumArgs-1);
1727 TheCall->setArg(NumArgs-1, CastArg);
1736 ExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) {
1737 if (TheCall->getNumArgs() < 2)
1738 return ExprError(Diag(TheCall->getLocEnd(),
1740 << 0 /*function call*/ << 2 << TheCall->getNumArgs()
1741 << TheCall->getSourceRange());
1747 QualType resType = TheCall->getArg(0)->getType();
1750 if (!TheCall->getArg(0)->isTypeDependent() &&
1751 !TheCall->getArg(1)->isTypeDependent()) {
1752 QualType LHSType = TheCall->getArg(0)->getType();
1753 QualType RHSType = TheCall->getArg(1)->getType();
1756 return ExprError(Diag(TheCall->getLocStart(),
1758 << SourceRange(TheCall->getArg(0)->getLocStart(),
1759 TheCall->getArg(1)->getLocEnd()));
1762 unsigned numResElements = TheCall->getNumArgs() - 2;
1767 if (TheCall->getNumArgs() == 2) {
1770 return ExprError(Diag(TheCall->getLocStart(),
1772 << SourceRange(TheCall->getArg(1)->getLocStart(),
1773 TheCall->getArg(1)->getLocEnd()));
1775 return ExprError(Diag(TheCall->getLocStart(),
1777 << SourceRange(TheCall->getArg(0)->getLocStart(),
1778 TheCall->getArg(1)->getLocEnd()));
1786 for (unsigned i = 2; i < TheCall->getNumArgs(); i++) {
1787 if (TheCall->getArg(i)->isTypeDependent() ||
1788 TheCall->getArg(i)->isValueDependent())
1792 if (!TheCall->getArg(i)->isIntegerConstantExpr(Result, Context))
1793 return ExprError(Diag(TheCall->getLocStart(),
1795 << TheCall->getArg(i)->getSourceRange());
1802 return ExprError(Diag(TheCall->getLocStart(),
1804 << TheCall->getArg(i)->getSourceRange());
1809 for (unsigned i = 0, e = TheCall->getNumArgs(); i != e; i++) {
1810 exprs.push_back(TheCall->getArg(i));
1811 TheCall->setArg(i, 0);
1815 TheCall->getCallee()->getLocStart(),
1816 TheCall->getRParenLoc()));
1822 bool Sema::SemaBuiltinPrefetch(CallExpr *TheCall) {
1823 unsigned NumArgs = TheCall->getNumArgs();
1826 return Diag(TheCall->getLocEnd(),
1829 << TheCall->getSourceRange();
1834 Expr *Arg = TheCall->getArg(i);
1841 if (SemaBuiltinConstantArg(TheCall, i, Result))
1849 return Diag(TheCall->getLocStart(), diag::err_argument_invalid_range)
1853 return Diag(TheCall->getLocStart(), diag::err_argument_invalid_range)
1862 /// TheCall is a constant expression.
1863 bool Sema::SemaBuiltinConstantArg(CallExpr *TheCall, int ArgNum,
1865 Expr *Arg = TheCall->getArg(ArgNum);
1866 DeclRefExpr *DRE =cast<DeclRefExpr>(TheCall->getCallee()->IgnoreParenCasts());
1872 return Diag(TheCall->getLocStart(), diag::err_constant_integer_arg_type)
1882 bool Sema::SemaBuiltinObjectSize(CallExpr *TheCall) {
1886 if (TheCall->getArg(1)->isTypeDependent() ||
1887 TheCall->getArg(1)->isValueDependent())
1891 if (SemaBuiltinConstantArg(TheCall, 1, Result))
1894 Expr *Arg = TheCall->getArg(1);
1896 return Diag(TheCall->getLocStart(), diag::err_argument_invalid_range)
1905 bool Sema::SemaBuiltinLongjmp(CallExpr *TheCall) {
1906 Expr *Arg = TheCall->getArg(1);
1910 if (SemaBuiltinConstantArg(TheCall, 1, Result))
1914 return Diag(TheCall->getLocStart(), diag::err_builtin_longjmp_invalid_val)
5101 void CheckImplicitArgumentConversions(Sema &S, CallExpr *TheCall,
5103 unsigned NumArgs = TheCall->getNumArgs();
5105 Expr *CurrA = TheCall->getArg(i);
5110 TheCall->getArg(i - 1), false));
5112 IsImplicitBoolFloatConversion(S, TheCall->getArg(i + 1), false));