Lines Matching refs:Call

78 class CStringChecker : public Checker< eval::Call,
110 bool evalCall(const CallEvent &Call, CheckerContext &C) const;
121 const CallEvent *Call) const;
175 FnCheck identifyCall(const CallEvent &Call, CheckerContext &C) const;
176 void evalMemcpy(CheckerContext &C, const CallEvent &Call, CharKind CK) const;
177 void evalMempcpy(CheckerContext &C, const CallEvent &Call, CharKind CK) const;
178 void evalMemmove(CheckerContext &C, const CallEvent &Call, CharKind CK) const;
179 void evalBcopy(CheckerContext &C, const CallEvent &Call) const;
180 void evalCopyCommon(CheckerContext &C, const CallEvent &Call,
185 void evalMemcmp(CheckerContext &C, const CallEvent &Call, CharKind CK) const;
187 void evalstrLength(CheckerContext &C, const CallEvent &Call) const;
188 void evalstrnLength(CheckerContext &C, const CallEvent &Call) const;
189 void evalstrLengthCommon(CheckerContext &C, const CallEvent &Call,
192 void evalStrcpy(CheckerContext &C, const CallEvent &Call) const;
193 void evalStrncpy(CheckerContext &C, const CallEvent &Call) const;
194 void evalStpcpy(CheckerContext &C, const CallEvent &Call) const;
195 void evalStrlcpy(CheckerContext &C, const CallEvent &Call) const;
196 void evalStrcpyCommon(CheckerContext &C, const CallEvent &Call,
200 void evalStrcat(CheckerContext &C, const CallEvent &Call) const;
201 void evalStrncat(CheckerContext &C, const CallEvent &Call) const;
202 void evalStrlcat(CheckerContext &C, const CallEvent &Call) const;
204 void evalStrcmp(CheckerContext &C, const CallEvent &Call) const;
205 void evalStrncmp(CheckerContext &C, const CallEvent &Call) const;
206 void evalStrcasecmp(CheckerContext &C, const CallEvent &Call) const;
207 void evalStrncasecmp(CheckerContext &C, const CallEvent &Call) const;
208 void evalStrcmpCommon(CheckerContext &C, const CallEvent &Call,
211 void evalStrsep(CheckerContext &C, const CallEvent &Call) const;
213 void evalStdCopy(CheckerContext &C, const CallEvent &Call) const;
214 void evalStdCopyBackward(CheckerContext &C, const CallEvent &Call) const;
215 void evalStdCopyCommon(CheckerContext &C, const CallEvent &Call) const;
216 void evalMemset(CheckerContext &C, const CallEvent &Call) const;
217 void evalBzero(CheckerContext &C, const CallEvent &Call) const;
219 void evalSprintf(CheckerContext &C, const CallEvent &Call) const;
220 void evalSnprintf(CheckerContext &C, const CallEvent &Call) const;
221 void evalSprintfCommon(CheckerContext &C, const CallEvent &Call,
1291 void CStringChecker::evalCopyCommon(CheckerContext &C, const CallEvent &Call, in evalCopyCommon() argument
1314 stateZeroSize->BindExpr(Call.getOriginExpr(), LCtx, destVal); in evalCopyCommon()
1363 nullptr, Call.getOriginExpr(), LCtx, C.blockCount()); in evalCopyCommon()
1366 state = state->BindExpr(Call.getOriginExpr(), LCtx, lastElement); in evalCopyCommon()
1370 state = state->BindExpr(Call.getOriginExpr(), LCtx, destVal); in evalCopyCommon()
1392 void CStringChecker::evalMemcpy(CheckerContext &C, const CallEvent &Call, in evalMemcpy() argument
1396 DestinationArgExpr Dest = {{Call.getArgExpr(0), 0}}; in evalMemcpy()
1397 SourceArgExpr Src = {{Call.getArgExpr(1), 1}}; in evalMemcpy()
1398 SizeArgExpr Size = {{Call.getArgExpr(2), 2}}; in evalMemcpy()
1404 evalCopyCommon(C, Call, State, Size, Dest, Src, IsRestricted, IsMempcpy, CK); in evalMemcpy()
1407 void CStringChecker::evalMempcpy(CheckerContext &C, const CallEvent &Call, in evalMempcpy() argument
1411 DestinationArgExpr Dest = {{Call.getArgExpr(0), 0}}; in evalMempcpy()
1412 SourceArgExpr Src = {{Call.getArgExpr(1), 1}}; in evalMempcpy()
1413 SizeArgExpr Size = {{Call.getArgExpr(2), 2}}; in evalMempcpy()
1417 evalCopyCommon(C, Call, C.getState(), Size, Dest, Src, IsRestricted, in evalMempcpy()
1421 void CStringChecker::evalMemmove(CheckerContext &C, const CallEvent &Call, in evalMemmove() argument
1425 DestinationArgExpr Dest = {{Call.getArgExpr(0), 0}}; in evalMemmove()
1426 SourceArgExpr Src = {{Call.getArgExpr(1), 1}}; in evalMemmove()
1427 SizeArgExpr Size = {{Call.getArgExpr(2), 2}}; in evalMemmove()
1431 evalCopyCommon(C, Call, C.getState(), Size, Dest, Src, IsRestricted, in evalMemmove()
1435 void CStringChecker::evalBcopy(CheckerContext &C, const CallEvent &Call) const { in evalBcopy()
1437 SourceArgExpr Src{{Call.getArgExpr(0), 0}}; in evalBcopy()
1438 DestinationArgExpr Dest = {{Call.getArgExpr(1), 1}}; in evalBcopy()
1439 SizeArgExpr Size = {{Call.getArgExpr(2), 2}}; in evalBcopy()
1443 evalCopyCommon(C, Call, C.getState(), Size, Dest, Src, IsRestricted, in evalBcopy()
1447 void CStringChecker::evalMemcmp(CheckerContext &C, const CallEvent &Call, in evalMemcmp() argument
1452 AnyArgExpr Left = {Call.getArgExpr(0), 0}; in evalMemcmp()
1453 AnyArgExpr Right = {Call.getArgExpr(1), 1}; in evalMemcmp()
1454 SizeArgExpr Size = {{Call.getArgExpr(2), 2}}; in evalMemcmp()
1472 State = State->BindExpr(Call.getOriginExpr(), LCtx, in evalMemcmp()
1473 Builder.makeZeroVal(Call.getResultType())); in evalMemcmp()
1499 State = SameBuffer->BindExpr(Call.getOriginExpr(), LCtx, in evalMemcmp()
1500 Builder.makeZeroVal(Call.getResultType())); in evalMemcmp()
1513 SVal CmpV = Builder.conjureSymbolVal(nullptr, Call.getOriginExpr(), LCtx, in evalMemcmp()
1515 State = State->BindExpr(Call.getOriginExpr(), LCtx, CmpV); in evalMemcmp()
1522 const CallEvent &Call) const { in evalstrLength()
1524 evalstrLengthCommon(C, Call, /* IsStrnlen = */ false); in evalstrLength()
1528 const CallEvent &Call) const { in evalstrnLength()
1530 evalstrLengthCommon(C, Call, /* IsStrnlen = */ true); in evalstrnLength()
1534 const CallEvent &Call, in evalstrLengthCommon() argument
1541 const Expr *maxlenExpr = Call.getArgExpr(1); in evalstrLengthCommon()
1551 SVal zero = C.getSValBuilder().makeZeroVal(Call.getResultType()); in evalstrLengthCommon()
1552 stateZeroSize = stateZeroSize->BindExpr(Call.getOriginExpr(), LCtx, zero); in evalstrLengthCommon()
1565 AnyArgExpr Arg = {Call.getArgExpr(0), 0}; in evalstrLengthCommon()
1588 const Expr *maxlenExpr = Call.getArgExpr(1); in evalstrLengthCommon()
1618 nullptr, Call.getOriginExpr(), LCtx, C.blockCount()); in evalstrLengthCommon()
1642 nullptr, Call.getOriginExpr(), LCtx, C.blockCount()); in evalstrLengthCommon()
1648 state = state->BindExpr(Call.getOriginExpr(), LCtx, result); in evalstrLengthCommon()
1653 const CallEvent &Call) const { in evalStrcpy()
1655 evalStrcpyCommon(C, Call, in evalStrcpy()
1662 const CallEvent &Call) const { in evalStrncpy()
1664 evalStrcpyCommon(C, Call, in evalStrncpy()
1671 const CallEvent &Call) const { in evalStpcpy()
1673 evalStrcpyCommon(C, Call, in evalStpcpy()
1680 const CallEvent &Call) const { in evalStrlcpy()
1682 evalStrcpyCommon(C, Call, in evalStrlcpy()
1690 const CallEvent &Call) const { in evalStrcat()
1692 evalStrcpyCommon(C, Call, in evalStrcat()
1699 const CallEvent &Call) const { in evalStrncat()
1701 evalStrcpyCommon(C, Call, in evalStrncat()
1708 const CallEvent &Call) const { in evalStrlcat()
1712 evalStrcpyCommon(C, Call, in evalStrlcat()
1719 void CStringChecker::evalStrcpyCommon(CheckerContext &C, const CallEvent &Call, in evalStrcpyCommon() argument
1732 DestinationArgExpr Dst = {{Call.getArgExpr(0), 0}}; in evalStrcpyCommon()
1739 SourceArgExpr srcExpr = {{Call.getArgExpr(1), 1}}; in evalStrcpyCommon()
1774 (IsBounded ? SizeArgExpr{{Call.getArgExpr(2), 2}} : SrcExprAsSizeDummy), in evalStrcpyCommon()
1783 SizeArgExpr lenExpr = {{Call.getArgExpr(2), 2}}; in evalStrcpyCommon()
1898 StateZeroSize->BindExpr(Call.getOriginExpr(), LCtx, DstVal); in evalStrcpyCommon()
1902 StateZeroSize = StateZeroSize->BindExpr(Call.getOriginExpr(), in evalStrcpyCommon()
1909 StateZeroSize->BindExpr(Call.getOriginExpr(), LCtx, retSize); in evalStrcpyCommon()
1979 getCStringLength(C, state, Call.getOriginExpr(), DstVal, true); in evalStrcpyCommon()
2109 Result = svalBuilder.conjureSymbolVal(nullptr, Call.getOriginExpr(), LCtx, in evalStrcpyCommon()
2114 state = state->BindExpr(Call.getOriginExpr(), LCtx, Result); in evalStrcpyCommon()
2119 const CallEvent &Call) const { in evalStrcmp()
2121 evalStrcmpCommon(C, Call, /* IsBounded = */ false, /* IgnoreCase = */ false); in evalStrcmp()
2125 const CallEvent &Call) const { in evalStrncmp()
2127 evalStrcmpCommon(C, Call, /* IsBounded = */ true, /* IgnoreCase = */ false); in evalStrncmp()
2131 const CallEvent &Call) const { in evalStrcasecmp()
2133 evalStrcmpCommon(C, Call, /* IsBounded = */ false, /* IgnoreCase = */ true); in evalStrcasecmp()
2137 const CallEvent &Call) const { in evalStrncasecmp()
2139 evalStrcmpCommon(C, Call, /* IsBounded = */ true, /* IgnoreCase = */ true); in evalStrncasecmp()
2142 void CStringChecker::evalStrcmpCommon(CheckerContext &C, const CallEvent &Call, in evalStrcmpCommon() argument
2149 AnyArgExpr Left = {Call.getArgExpr(0), 0}; in evalStrcmpCommon()
2156 AnyArgExpr Right = {Call.getArgExpr(1), 1}; in evalStrcmpCommon()
2188 StSameBuf->BindExpr(Call.getOriginExpr(), LCtx, in evalStrcmpCommon()
2189 svalBuilder.makeZeroVal(Call.getResultType())); in evalStrcmpCommon()
2209 SVal resultVal = svalBuilder.conjureSymbolVal(nullptr, Call.getOriginExpr(), in evalStrcmpCommon()
2218 const Expr *lenExpr = Call.getArgExpr(2); in evalStrcmpCommon()
2250 resultVal = svalBuilder.makeIntVal(compareRes, Call.getResultType()); in evalStrcmpCommon()
2253 DefinedSVal zeroVal = svalBuilder.makeIntVal(0, Call.getResultType()); in evalStrcmpCommon()
2266 state = state->BindExpr(Call.getOriginExpr(), LCtx, resultVal); in evalStrcmpCommon()
2273 const CallEvent &Call) const { in evalStrsep()
2276 SourceArgExpr SearchStrPtr = {{Call.getArgExpr(0), 0}}; in evalStrsep()
2279 if (CharPtrTy.isNull() || Call.getResultType().getUnqualifiedType() != in evalStrsep()
2295 AnyArgExpr DelimStr = {Call.getArgExpr(1), 1}; in evalStrsep()
2317 SVB.conjureSymbolVal(getTag(), Call.getOriginExpr(), in evalStrsep()
2323 Result = SVB.conjureSymbolVal(nullptr, Call.getOriginExpr(), LCtx, in evalStrsep()
2328 State = State->BindExpr(Call.getOriginExpr(), LCtx, Result); in evalStrsep()
2334 const CallEvent &Call) const { in evalStdCopy()
2335 evalStdCopyCommon(C, Call); in evalStdCopy()
2339 const CallEvent &Call) const { in evalStdCopyBackward()
2340 evalStdCopyCommon(C, Call); in evalStdCopyBackward()
2344 const CallEvent &Call) const { in evalStdCopyCommon()
2345 if (!Call.getArgExpr(2)->getType()->isPointerType()) in evalStdCopyCommon()
2358 const Expr *Dst = Call.getArgExpr(2); in evalStdCopyCommon()
2368 SVB.conjureSymbolVal(nullptr, Call.getOriginExpr(), LCtx, C.blockCount()); in evalStdCopyCommon()
2369 State = State->BindExpr(Call.getOriginExpr(), LCtx, ResultVal); in evalStdCopyCommon()
2375 const CallEvent &Call) const { in evalMemset()
2379 DestinationArgExpr Buffer = {{Call.getArgExpr(0), 0}}; in evalMemset()
2380 AnyArgExpr CharE = {Call.getArgExpr(1), 1}; in evalMemset()
2381 SizeArgExpr Size = {{Call.getArgExpr(2), 2}}; in evalMemset()
2399 ZeroSize = ZeroSize->BindExpr(Call.getOriginExpr(), LCtx, BufferPtrVal); in evalMemset()
2421 State = State->BindExpr(Call.getOriginExpr(), LCtx, BufferPtrVal); in evalMemset()
2425 void CStringChecker::evalBzero(CheckerContext &C, const CallEvent &Call) const { in evalBzero()
2428 DestinationArgExpr Buffer = {{Call.getArgExpr(0), 0}}; in evalBzero()
2429 SizeArgExpr Size = {{Call.getArgExpr(1), 1}}; in evalBzero()
2469 const CallEvent &Call) const { in evalSprintf()
2471 const auto *CE = cast<CallExpr>(Call.getOriginExpr()); in evalSprintf()
2473 evalSprintfCommon(C, Call, /* IsBounded */ false, IsBI); in evalSprintf()
2477 const CallEvent &Call) const { in evalSnprintf()
2479 const auto *CE = cast<CallExpr>(Call.getOriginExpr()); in evalSnprintf()
2481 evalSprintfCommon(C, Call, /* IsBounded */ true, IsBI); in evalSnprintf()
2484 void CStringChecker::evalSprintfCommon(CheckerContext &C, const CallEvent &Call, in evalSprintfCommon() argument
2487 const auto *CE = cast<CallExpr>(Call.getOriginExpr()); in evalSprintfCommon()
2488 DestinationArgExpr Dest = {{Call.getArgExpr(0), 0}}; in evalSprintfCommon()
2490 const auto NumParams = Call.parameters().size(); in evalSprintfCommon()
2510 (IsBounded ? SizeArgExpr{{Call.getArgExpr(1), 1}} : SrcExprAsSizeDummy), in evalSprintfCommon()
2523 CStringChecker::FnCheck CStringChecker::identifyCall(const CallEvent &Call, in identifyCall() argument
2525 const auto *CE = dyn_cast_or_null<CallExpr>(Call.getOriginExpr()); in identifyCall()
2529 const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(Call.getDecl()); in identifyCall()
2533 if (StdCopy.matches(Call)) in identifyCall()
2535 if (StdCopyBackward.matches(Call)) in identifyCall()
2548 const FnCheck *Callback = Callbacks.lookup(Call); in identifyCall()
2555 bool CStringChecker::evalCall(const CallEvent &Call, CheckerContext &C) const { in evalCall() argument
2556 FnCheck Callback = identifyCall(Call, C); in evalCall()
2563 assert(isa<CallExpr>(Call.getOriginExpr())); in evalCall()
2564 Callback(this, C, Call); in evalCall()
2616 const CallEvent *Call) const { in checkRegionChanges()