Lines Matching defs:Call

220 SVal getStreamArg(const FnDescription *Desc, const CallEvent &Call) {
223 return Call.getArgSVal(Desc->StreamArgNo);
256 class StreamChecker : public Checker<check::PreCall, eval::Call,
272 void checkPreCall(const CallEvent &Call, CheckerContext &C) const;
273 bool evalCall(const CallEvent &Call, CheckerContext &C) const;
277 const CallEvent *Call,
469 void evalFopen(const FnDescription *Desc, const CallEvent &Call,
472 void preFreopen(const FnDescription *Desc, const CallEvent &Call,
474 void evalFreopen(const FnDescription *Desc, const CallEvent &Call,
477 void evalFclose(const FnDescription *Desc, const CallEvent &Call,
480 void preRead(const FnDescription *Desc, const CallEvent &Call,
483 void preWrite(const FnDescription *Desc, const CallEvent &Call,
486 void evalFreadFwrite(const FnDescription *Desc, const CallEvent &Call,
489 void evalFgetx(const FnDescription *Desc, const CallEvent &Call,
492 void evalFputx(const FnDescription *Desc, const CallEvent &Call,
495 void evalFprintf(const FnDescription *Desc, const CallEvent &Call,
498 void evalFscanf(const FnDescription *Desc, const CallEvent &Call,
501 void evalUngetc(const FnDescription *Desc, const CallEvent &Call,
504 void evalGetdelim(const FnDescription *Desc, const CallEvent &Call,
507 void preFseek(const FnDescription *Desc, const CallEvent &Call,
509 void evalFseek(const FnDescription *Desc, const CallEvent &Call,
512 void evalFgetpos(const FnDescription *Desc, const CallEvent &Call,
515 void evalFsetpos(const FnDescription *Desc, const CallEvent &Call,
518 void evalFtell(const FnDescription *Desc, const CallEvent &Call,
521 void evalRewind(const FnDescription *Desc, const CallEvent &Call,
524 void preDefault(const FnDescription *Desc, const CallEvent &Call,
527 void evalClearerr(const FnDescription *Desc, const CallEvent &Call,
530 void evalFeofFerror(const FnDescription *Desc, const CallEvent &Call,
534 void evalSetFeofFerror(const FnDescription *Desc, const CallEvent &Call,
538 void preFflush(const FnDescription *Desc, const CallEvent &Call,
541 void evalFflush(const FnDescription *Desc, const CallEvent &Call,
544 void evalFileno(const FnDescription *Desc, const CallEvent &Call,
593 const FnDescription *lookupFn(const CallEvent &Call) const {
596 for (auto *P : Call.parameters()) {
603 return FnDescriptions.lookup(Call);
655 bool Init(const FnDescription *Desc, const CallEvent &Call, CheckerContext &C,
657 StreamSym = getStreamArg(Desc, Call).getAsSymbol();
664 CE = dyn_cast_or_null<CallExpr>(Call.getOriginExpr());
675 NonLoc getZeroVal(const CallEvent &Call) {
676 return *SVB.makeZeroVal(Call.getResultType()).getAs<NonLoc>();
751 bool isClosingCallAsWritten(const CallExpr &Call) const {
753 return StreamChk->FCloseDesc.matchesAsWritten(Call);
773 if (const auto *Call = Match.getNodeAs<CallExpr>("call"))
774 if (isClosingCallAsWritten(*Call))
836 escapeByStartIndexAndCount(ProgramStateRef State, const CallEvent &Call,
844 const LocationContext *LCtx = Call.getLocationContext();
861 EscapingVals, Call.getOriginExpr(), BlockCount, LCtx,
863 /*InvalidatedSymbols=*/nullptr, &Call, &ITraits);
867 const CallEvent &Call,
869 auto GetArgSVal = [&Call](int Idx) { return Call.getArgSVal(Idx); };
871 State = State->invalidateRegions(EscapingVals, Call.getOriginExpr(),
882 void StreamChecker::checkPreCall(const CallEvent &Call,
884 const FnDescription *Desc = lookupFn(Call);
888 Desc->PreFn(this, Desc, Call, C);
891 bool StreamChecker::evalCall(const CallEvent &Call, CheckerContext &C) const {
892 const FnDescription *Desc = lookupFn(Call);
894 Desc = FnTestDescriptions.lookup(Call);
898 Desc->EvalFn(this, Desc, Call, C);
927 void StreamChecker::evalFopen(const FnDescription *Desc, const CallEvent &Call,
930 const CallExpr *CE = dyn_cast_or_null<CallExpr>(Call.getOriginExpr());
958 void StreamChecker::preFreopen(const FnDescription *Desc, const CallEvent &Call,
962 State = ensureStreamNonNull(getStreamArg(Desc, Call),
963 Call.getArgExpr(Desc->StreamArgNo), C, State);
971 const CallEvent &Call,
975 auto *CE = dyn_cast_or_null<CallExpr>(Call.getOriginExpr());
980 getStreamArg(Desc, Call).getAs<DefinedSVal>();
1016 void StreamChecker::evalFclose(const FnDescription *Desc, const CallEvent &Call,
1020 if (!E.Init(Desc, Call, C, State))
1033 void StreamChecker::preRead(const FnDescription *Desc, const CallEvent &Call,
1036 SVal StreamVal = getStreamArg(Desc, Call);
1037 State = ensureStreamNonNull(StreamVal, Call.getArgExpr(Desc->StreamArgNo), C,
1058 void StreamChecker::preWrite(const FnDescription *Desc, const CallEvent &Call,
1061 SVal StreamVal = getStreamArg(Desc, Call);
1062 State = ensureStreamNonNull(StreamVal, Call.getArgExpr(Desc->StreamArgNo), C,
1109 const CallEvent &Call, NonLoc SizeVal,
1113 dyn_cast_or_null<SubRegion>(Call.getArgSVal(0).getAsRegion());
1141 return escapeByStartIndexAndCount(State, Call, C.blockCount(), Buffer,
1150 const CallEvent &Call, CheckerContext &C,
1154 if (!E.Init(Desc, Call, C, State))
1157 std::optional<NonLoc> SizeVal = Call.getArgSVal(1).getAs<NonLoc>();
1160 std::optional<NonLoc> NMembVal = Call.getArgSVal(2).getAs<NonLoc>();
1183 State, C, Call, *SizeVal, *NMembVal);
1185 InvalidatedState ? InvalidatedState : escapeArgs(State, C, Call, {0});
1222 void StreamChecker::evalFgetx(const FnDescription *Desc, const CallEvent &Call,
1229 if (!E.Init(Desc, Call, C, State))
1235 State = escapeArgs(State, C, Call, {0});
1254 Call.getArgSVal(0).getAs<DefinedSVal>();
1281 void StreamChecker::evalFputx(const FnDescription *Desc, const CallEvent &Call,
1288 if (!E.Init(Desc, Call, C, State))
1293 std::optional<NonLoc> PutVal = Call.getArgSVal(0).getAs<NonLoc>();
1307 E.assumeBinOpNN(StateNotFailed, BO_GE, RetVal, E.getZeroVal(Call));
1327 const CallEvent &Call,
1329 if (Call.getNumArgs() < 2)
1334 if (!E.Init(Desc, Call, C, State))
1363 void StreamChecker::evalFscanf(const FnDescription *Desc, const CallEvent &Call,
1365 if (Call.getNumArgs() < 2)
1370 if (!E.Init(Desc, Call, C, State))
1386 E.assumeBinOpNN(StateNotFailed, BO_GE, RetVal, E.getZeroVal(Call));
1390 if (auto const *Callee = Call.getCalleeIdentifier();
1393 for (auto EscArg : llvm::seq(2u, Call.getNumArgs()))
1395 StateNotFailed = escapeArgs(StateNotFailed, C, Call, EscArgs);
1416 void StreamChecker::evalUngetc(const FnDescription *Desc, const CallEvent &Call,
1420 if (!E.Init(Desc, Call, C, State))
1424 std::optional<NonLoc> PutVal = Call.getArgSVal(0).getAs<NonLoc>();
1444 const CallEvent &Call,
1448 if (!E.Init(Desc, Call, C, State))
1460 State = escapeArgs(State, C, Call, {0, 1});
1466 E.assumeBinOpNN(StateNotFailed, BO_GE, RetVal, E.getZeroVal(Call));
1469 auto NewLinePtr = getPointeeVal(Call.getArgSVal(0), State);
1476 SVal SizePtrSval = Call.getArgSVal(1);
1497 if (auto NewLinePtr = getPointeeVal(Call.getArgSVal(0), State))
1503 void StreamChecker::preFseek(const FnDescription *Desc, const CallEvent &Call,
1506 SVal StreamVal = getStreamArg(Desc, Call);
1507 State = ensureStreamNonNull(StreamVal, Call.getArgExpr(Desc->StreamArgNo), C,
1514 State = ensureFseekWhenceCorrect(Call.getArgSVal(2), C, State);
1521 void StreamChecker::evalFseek(const FnDescription *Desc, const CallEvent &Call,
1525 if (!E.Init(Desc, Call, C, State))
1551 const CallEvent &Call,
1555 if (!E.Init(Desc, Call, C, State))
1560 StateNotFailed = escapeArgs(StateNotFailed, C, Call, {1});
1570 const CallEvent &Call,
1574 if (!E.Init(Desc, Call, C, State))
1597 void StreamChecker::evalFtell(const FnDescription *Desc, const CallEvent &Call,
1601 if (!E.Init(Desc, Call, C, State))
1608 E.assumeBinOpNN(StateNotFailed, BO_GE, RetVal, E.getZeroVal(Call));
1621 void StreamChecker::evalRewind(const FnDescription *Desc, const CallEvent &Call,
1625 if (!E.Init(Desc, Call, C, State))
1633 void StreamChecker::preFflush(const FnDescription *Desc, const CallEvent &Call,
1636 SVal StreamVal = getStreamArg(Desc, Call);
1648 void StreamChecker::evalFflush(const FnDescription *Desc, const CallEvent &Call,
1651 SVal StreamVal = getStreamArg(Desc, Call);
1667 const CallExpr *CE = dyn_cast_or_null<CallExpr>(Call.getOriginExpr());
1712 const CallEvent &Call,
1716 if (!E.Init(Desc, Call, C, State))
1727 const CallEvent &Call, CheckerContext &C,
1731 if (!E.Init(Desc, Call, C, State))
1756 void StreamChecker::evalFileno(const FnDescription *Desc, const CallEvent &Call,
1769 if (!E.Init(Desc, Call, C, State))
1774 State = E.assumeBinOpNN(State, BO_GE, RetVal, E.getZeroVal(Call));
1781 void StreamChecker::preDefault(const FnDescription *Desc, const CallEvent &Call,
1784 SVal StreamVal = getStreamArg(Desc, Call);
1785 State = ensureStreamNonNull(StreamVal, Call.getArgExpr(Desc->StreamArgNo), C,
1797 const CallEvent &Call, CheckerContext &C,
1801 SymbolRef StreamSym = getStreamArg(Desc, Call).getAsSymbol();
2079 const CallEvent *Call, PointerEscapeKind Kind) const {
2083 if (Kind == PSK_DirectEscapeOnCall && Call->isInSystemHeader())