Lines Matching refs:Call

82 class CStringChecker : public Checker< eval::Call,
114 bool evalCall(const CallEvent &Call, CheckerContext &C) const;
125 const CallEvent *Call) const;
199 FnCheck identifyCall(const CallEvent &Call, CheckerContext &C) const;
200 void evalMemcpy(CheckerContext &C, const CallEvent &Call, CharKind CK) const;
201 void evalMempcpy(CheckerContext &C, const CallEvent &Call, CharKind CK) const;
202 void evalMemmove(CheckerContext &C, const CallEvent &Call, CharKind CK) const;
203 void evalBcopy(CheckerContext &C, const CallEvent &Call) const;
204 void evalCopyCommon(CheckerContext &C, const CallEvent &Call,
209 void evalMemcmp(CheckerContext &C, const CallEvent &Call, CharKind CK) const;
211 void evalstrLength(CheckerContext &C, const CallEvent &Call) const;
212 void evalstrnLength(CheckerContext &C, const CallEvent &Call) const;
213 void evalstrLengthCommon(CheckerContext &C, const CallEvent &Call,
216 void evalStrcpy(CheckerContext &C, const CallEvent &Call) const;
217 void evalStrncpy(CheckerContext &C, const CallEvent &Call) const;
218 void evalStpcpy(CheckerContext &C, const CallEvent &Call) const;
219 void evalStrlcpy(CheckerContext &C, const CallEvent &Call) const;
220 void evalStrcpyCommon(CheckerContext &C, const CallEvent &Call,
224 void evalStrcat(CheckerContext &C, const CallEvent &Call) const;
225 void evalStrncat(CheckerContext &C, const CallEvent &Call) const;
226 void evalStrlcat(CheckerContext &C, const CallEvent &Call) const;
228 void evalStrcmp(CheckerContext &C, const CallEvent &Call) const;
229 void evalStrncmp(CheckerContext &C, const CallEvent &Call) const;
230 void evalStrcasecmp(CheckerContext &C, const CallEvent &Call) const;
231 void evalStrncasecmp(CheckerContext &C, const CallEvent &Call) const;
232 void evalStrcmpCommon(CheckerContext &C, const CallEvent &Call,
235 void evalStrsep(CheckerContext &C, const CallEvent &Call) const;
237 void evalStdCopy(CheckerContext &C, const CallEvent &Call) const;
238 void evalStdCopyBackward(CheckerContext &C, const CallEvent &Call) const;
239 void evalStdCopyCommon(CheckerContext &C, const CallEvent &Call) const;
240 void evalMemset(CheckerContext &C, const CallEvent &Call) const;
241 void evalBzero(CheckerContext &C, const CallEvent &Call) const;
243 void evalSprintf(CheckerContext &C, const CallEvent &Call) const;
244 void evalSnprintf(CheckerContext &C, const CallEvent &Call) const;
245 void evalSprintfCommon(CheckerContext &C, const CallEvent &Call,
1436 void CStringChecker::evalCopyCommon(CheckerContext &C, const CallEvent &Call, in evalCopyCommon() argument
1459 stateZeroSize->BindExpr(Call.getOriginExpr(), LCtx, destVal); in evalCopyCommon()
1511 nullptr, Call.getOriginExpr(), LCtx, C.blockCount()); in evalCopyCommon()
1514 state = state->BindExpr(Call.getOriginExpr(), LCtx, lastElement); in evalCopyCommon()
1518 state = state->BindExpr(Call.getOriginExpr(), LCtx, destVal); in evalCopyCommon()
1540 void CStringChecker::evalMemcpy(CheckerContext &C, const CallEvent &Call, in evalMemcpy() argument
1544 DestinationArgExpr Dest = {{Call.getArgExpr(0), 0}}; in evalMemcpy()
1545 SourceArgExpr Src = {{Call.getArgExpr(1), 1}}; in evalMemcpy()
1546 SizeArgExpr Size = {{Call.getArgExpr(2), 2}}; in evalMemcpy()
1552 evalCopyCommon(C, Call, State, Size, Dest, Src, IsRestricted, IsMempcpy, CK); in evalMemcpy()
1555 void CStringChecker::evalMempcpy(CheckerContext &C, const CallEvent &Call, in evalMempcpy() argument
1559 DestinationArgExpr Dest = {{Call.getArgExpr(0), 0}}; in evalMempcpy()
1560 SourceArgExpr Src = {{Call.getArgExpr(1), 1}}; in evalMempcpy()
1561 SizeArgExpr Size = {{Call.getArgExpr(2), 2}}; in evalMempcpy()
1565 evalCopyCommon(C, Call, C.getState(), Size, Dest, Src, IsRestricted, in evalMempcpy()
1569 void CStringChecker::evalMemmove(CheckerContext &C, const CallEvent &Call, in evalMemmove() argument
1573 DestinationArgExpr Dest = {{Call.getArgExpr(0), 0}}; in evalMemmove()
1574 SourceArgExpr Src = {{Call.getArgExpr(1), 1}}; in evalMemmove()
1575 SizeArgExpr Size = {{Call.getArgExpr(2), 2}}; in evalMemmove()
1579 evalCopyCommon(C, Call, C.getState(), Size, Dest, Src, IsRestricted, in evalMemmove()
1583 void CStringChecker::evalBcopy(CheckerContext &C, const CallEvent &Call) const { in evalBcopy()
1585 SourceArgExpr Src{{Call.getArgExpr(0), 0}}; in evalBcopy()
1586 DestinationArgExpr Dest = {{Call.getArgExpr(1), 1}}; in evalBcopy()
1587 SizeArgExpr Size = {{Call.getArgExpr(2), 2}}; in evalBcopy()
1591 evalCopyCommon(C, Call, C.getState(), Size, Dest, Src, IsRestricted, in evalBcopy()
1595 void CStringChecker::evalMemcmp(CheckerContext &C, const CallEvent &Call, in evalMemcmp() argument
1600 AnyArgExpr Left = {Call.getArgExpr(0), 0}; in evalMemcmp()
1601 AnyArgExpr Right = {Call.getArgExpr(1), 1}; in evalMemcmp()
1602 SizeArgExpr Size = {{Call.getArgExpr(2), 2}}; in evalMemcmp()
1620 State = State->BindExpr(Call.getOriginExpr(), LCtx, in evalMemcmp()
1621 Builder.makeZeroVal(Call.getResultType())); in evalMemcmp()
1647 State = SameBuffer->BindExpr(Call.getOriginExpr(), LCtx, in evalMemcmp()
1648 Builder.makeZeroVal(Call.getResultType())); in evalMemcmp()
1661 SVal CmpV = Builder.conjureSymbolVal(nullptr, Call.getOriginExpr(), LCtx, in evalMemcmp()
1663 State = State->BindExpr(Call.getOriginExpr(), LCtx, CmpV); in evalMemcmp()
1670 const CallEvent &Call) const { in evalstrLength()
1672 evalstrLengthCommon(C, Call, /* IsStrnlen = */ false); in evalstrLength()
1676 const CallEvent &Call) const { in evalstrnLength()
1678 evalstrLengthCommon(C, Call, /* IsStrnlen = */ true); in evalstrnLength()
1682 const CallEvent &Call, in evalstrLengthCommon() argument
1689 const Expr *maxlenExpr = Call.getArgExpr(1); in evalstrLengthCommon()
1699 SVal zero = C.getSValBuilder().makeZeroVal(Call.getResultType()); in evalstrLengthCommon()
1700 stateZeroSize = stateZeroSize->BindExpr(Call.getOriginExpr(), LCtx, zero); in evalstrLengthCommon()
1713 AnyArgExpr Arg = {Call.getArgExpr(0), 0}; in evalstrLengthCommon()
1736 const Expr *maxlenExpr = Call.getArgExpr(1); in evalstrLengthCommon()
1766 nullptr, Call.getOriginExpr(), LCtx, C.blockCount()); in evalstrLengthCommon()
1790 nullptr, Call.getOriginExpr(), LCtx, C.blockCount()); in evalstrLengthCommon()
1796 state = state->BindExpr(Call.getOriginExpr(), LCtx, result); in evalstrLengthCommon()
1801 const CallEvent &Call) const { in evalStrcpy()
1803 evalStrcpyCommon(C, Call, in evalStrcpy()
1810 const CallEvent &Call) const { in evalStrncpy()
1812 evalStrcpyCommon(C, Call, in evalStrncpy()
1819 const CallEvent &Call) const { in evalStpcpy()
1821 evalStrcpyCommon(C, Call, in evalStpcpy()
1828 const CallEvent &Call) const { in evalStrlcpy()
1830 evalStrcpyCommon(C, Call, in evalStrlcpy()
1838 const CallEvent &Call) const { in evalStrcat()
1840 evalStrcpyCommon(C, Call, in evalStrcat()
1847 const CallEvent &Call) const { in evalStrncat()
1849 evalStrcpyCommon(C, Call, in evalStrncat()
1856 const CallEvent &Call) const { in evalStrlcat()
1860 evalStrcpyCommon(C, Call, in evalStrlcat()
1867 void CStringChecker::evalStrcpyCommon(CheckerContext &C, const CallEvent &Call, in evalStrcpyCommon() argument
1880 DestinationArgExpr Dst = {{Call.getArgExpr(0), 0}}; in evalStrcpyCommon()
1887 SourceArgExpr srcExpr = {{Call.getArgExpr(1), 1}}; in evalStrcpyCommon()
1922 (IsBounded ? SizeArgExpr{{Call.getArgExpr(2), 2}} : SrcExprAsSizeDummy), in evalStrcpyCommon()
1931 SizeArgExpr lenExpr = {{Call.getArgExpr(2), 2}}; in evalStrcpyCommon()
2046 StateZeroSize->BindExpr(Call.getOriginExpr(), LCtx, DstVal); in evalStrcpyCommon()
2050 StateZeroSize = StateZeroSize->BindExpr(Call.getOriginExpr(), in evalStrcpyCommon()
2057 StateZeroSize->BindExpr(Call.getOriginExpr(), LCtx, retSize); in evalStrcpyCommon()
2127 getCStringLength(C, state, Call.getOriginExpr(), DstVal, true); in evalStrcpyCommon()
2257 Result = svalBuilder.conjureSymbolVal(nullptr, Call.getOriginExpr(), LCtx, in evalStrcpyCommon()
2262 state = state->BindExpr(Call.getOriginExpr(), LCtx, Result); in evalStrcpyCommon()
2267 const CallEvent &Call) const { in evalStrcmp()
2269 evalStrcmpCommon(C, Call, /* IsBounded = */ false, /* IgnoreCase = */ false); in evalStrcmp()
2273 const CallEvent &Call) const { in evalStrncmp()
2275 evalStrcmpCommon(C, Call, /* IsBounded = */ true, /* IgnoreCase = */ false); in evalStrncmp()
2279 const CallEvent &Call) const { in evalStrcasecmp()
2281 evalStrcmpCommon(C, Call, /* IsBounded = */ false, /* IgnoreCase = */ true); in evalStrcasecmp()
2285 const CallEvent &Call) const { in evalStrncasecmp()
2287 evalStrcmpCommon(C, Call, /* IsBounded = */ true, /* IgnoreCase = */ true); in evalStrncasecmp()
2290 void CStringChecker::evalStrcmpCommon(CheckerContext &C, const CallEvent &Call, in evalStrcmpCommon() argument
2297 AnyArgExpr Left = {Call.getArgExpr(0), 0}; in evalStrcmpCommon()
2304 AnyArgExpr Right = {Call.getArgExpr(1), 1}; in evalStrcmpCommon()
2336 StSameBuf->BindExpr(Call.getOriginExpr(), LCtx, in evalStrcmpCommon()
2337 svalBuilder.makeZeroVal(Call.getResultType())); in evalStrcmpCommon()
2357 SVal resultVal = svalBuilder.conjureSymbolVal(nullptr, Call.getOriginExpr(), in evalStrcmpCommon()
2366 const Expr *lenExpr = Call.getArgExpr(2); in evalStrcmpCommon()
2398 resultVal = svalBuilder.makeIntVal(compareRes, Call.getResultType()); in evalStrcmpCommon()
2401 DefinedSVal zeroVal = svalBuilder.makeIntVal(0, Call.getResultType()); in evalStrcmpCommon()
2414 state = state->BindExpr(Call.getOriginExpr(), LCtx, resultVal); in evalStrcmpCommon()
2421 const CallEvent &Call) const { in evalStrsep()
2424 SourceArgExpr SearchStrPtr = {{Call.getArgExpr(0), 0}}; in evalStrsep()
2427 if (CharPtrTy.isNull() || Call.getResultType().getUnqualifiedType() != in evalStrsep()
2443 AnyArgExpr DelimStr = {Call.getArgExpr(1), 1}; in evalStrsep()
2465 SVB.conjureSymbolVal(getTag(), Call.getOriginExpr(), in evalStrsep()
2471 Result = SVB.conjureSymbolVal(nullptr, Call.getOriginExpr(), LCtx, in evalStrsep()
2476 State = State->BindExpr(Call.getOriginExpr(), LCtx, Result); in evalStrsep()
2482 const CallEvent &Call) const { in evalStdCopy()
2483 evalStdCopyCommon(C, Call); in evalStdCopy()
2487 const CallEvent &Call) const { in evalStdCopyBackward()
2488 evalStdCopyCommon(C, Call); in evalStdCopyBackward()
2492 const CallEvent &Call) const { in evalStdCopyCommon()
2493 if (!Call.getArgExpr(2)->getType()->isPointerType()) in evalStdCopyCommon()
2506 const Expr *Dst = Call.getArgExpr(2); in evalStdCopyCommon()
2516 SVB.conjureSymbolVal(nullptr, Call.getOriginExpr(), LCtx, C.blockCount()); in evalStdCopyCommon()
2517 State = State->BindExpr(Call.getOriginExpr(), LCtx, ResultVal); in evalStdCopyCommon()
2523 const CallEvent &Call) const { in evalMemset()
2527 DestinationArgExpr Buffer = {{Call.getArgExpr(0), 0}}; in evalMemset()
2528 AnyArgExpr CharE = {Call.getArgExpr(1), 1}; in evalMemset()
2529 SizeArgExpr Size = {{Call.getArgExpr(2), 2}}; in evalMemset()
2547 ZeroSize = ZeroSize->BindExpr(Call.getOriginExpr(), LCtx, BufferPtrVal); in evalMemset()
2569 State = State->BindExpr(Call.getOriginExpr(), LCtx, BufferPtrVal); in evalMemset()
2573 void CStringChecker::evalBzero(CheckerContext &C, const CallEvent &Call) const { in evalBzero()
2576 DestinationArgExpr Buffer = {{Call.getArgExpr(0), 0}}; in evalBzero()
2577 SizeArgExpr Size = {{Call.getArgExpr(1), 1}}; in evalBzero()
2617 const CallEvent &Call) const { in evalSprintf()
2619 evalSprintfCommon(C, Call, /* IsBounded = */ false); in evalSprintf()
2623 const CallEvent &Call) const { in evalSnprintf()
2625 evalSprintfCommon(C, Call, /* IsBounded = */ true); in evalSnprintf()
2628 void CStringChecker::evalSprintfCommon(CheckerContext &C, const CallEvent &Call, in evalSprintfCommon() argument
2631 const auto *CE = cast<CallExpr>(Call.getOriginExpr()); in evalSprintfCommon()
2632 DestinationArgExpr Dest = {{Call.getArgExpr(0), 0}}; in evalSprintfCommon()
2634 const auto NumParams = Call.parameters().size(); in evalSprintfCommon()
2657 (IsBounded ? SizeArgExpr{{Call.getArgExpr(1), 1}} : SrcExprAsSizeDummy), in evalSprintfCommon()
2670 CStringChecker::FnCheck CStringChecker::identifyCall(const CallEvent &Call, in identifyCall() argument
2672 const auto *CE = dyn_cast_or_null<CallExpr>(Call.getOriginExpr()); in identifyCall()
2676 const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(Call.getDecl()); in identifyCall()
2680 if (StdCopy.matches(Call)) in identifyCall()
2682 if (StdCopyBackward.matches(Call)) in identifyCall()
2695 const FnCheck *Callback = Callbacks.lookup(Call); in identifyCall()
2702 bool CStringChecker::evalCall(const CallEvent &Call, CheckerContext &C) const { in evalCall() argument
2703 FnCheck Callback = identifyCall(Call, C); in evalCall()
2710 assert(isa<CallExpr>(Call.getOriginExpr())); in evalCall()
2711 Callback(this, C, Call); in evalCall()
2763 const CallEvent *Call) const { in checkRegionChanges()