Lines Matching refs: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,
271 void checkPreCall(const CallEvent &Call, CheckerContext &C) const;
272 bool evalCall(const CallEvent &Call, CheckerContext &C) const;
276 const CallEvent *Call,
454 void evalFopen(const FnDescription *Desc, const CallEvent &Call,
457 void preFreopen(const FnDescription *Desc, const CallEvent &Call,
459 void evalFreopen(const FnDescription *Desc, const CallEvent &Call,
462 void evalFclose(const FnDescription *Desc, const CallEvent &Call,
465 void preRead(const FnDescription *Desc, const CallEvent &Call,
468 void preWrite(const FnDescription *Desc, const CallEvent &Call,
471 void evalFreadFwrite(const FnDescription *Desc, const CallEvent &Call,
474 void evalFgetx(const FnDescription *Desc, const CallEvent &Call,
477 void evalFputx(const FnDescription *Desc, const CallEvent &Call,
480 void evalFprintf(const FnDescription *Desc, const CallEvent &Call,
483 void evalFscanf(const FnDescription *Desc, const CallEvent &Call,
486 void evalUngetc(const FnDescription *Desc, const CallEvent &Call,
489 void evalGetdelim(const FnDescription *Desc, const CallEvent &Call,
492 void preFseek(const FnDescription *Desc, const CallEvent &Call,
494 void evalFseek(const FnDescription *Desc, const CallEvent &Call,
497 void evalFgetpos(const FnDescription *Desc, const CallEvent &Call,
500 void evalFsetpos(const FnDescription *Desc, const CallEvent &Call,
503 void evalFtell(const FnDescription *Desc, const CallEvent &Call,
506 void evalRewind(const FnDescription *Desc, const CallEvent &Call,
509 void preDefault(const FnDescription *Desc, const CallEvent &Call,
512 void evalClearerr(const FnDescription *Desc, const CallEvent &Call,
515 void evalFeofFerror(const FnDescription *Desc, const CallEvent &Call,
519 void evalSetFeofFerror(const FnDescription *Desc, const CallEvent &Call,
523 void preFflush(const FnDescription *Desc, const CallEvent &Call,
526 void evalFflush(const FnDescription *Desc, const CallEvent &Call,
529 void evalFileno(const FnDescription *Desc, const CallEvent &Call,
578 const FnDescription *lookupFn(const CallEvent &Call) const {
581 for (auto *P : Call.parameters()) {
588 return FnDescriptions.lookup(Call);
648 bool Init(const FnDescription *Desc, const CallEvent &Call, CheckerContext &C,
650 StreamSym = getStreamArg(Desc, Call).getAsSymbol();
657 CE = dyn_cast_or_null<CallExpr>(Call.getOriginExpr());
668 NonLoc getZeroVal(const CallEvent &Call) {
669 return *SVB.makeZeroVal(Call.getResultType()).getAs<NonLoc>();
744 bool isClosingCallAsWritten(const CallExpr &Call) const {
746 return StreamChk->FCloseDesc.matchesAsWritten(Call);
757 if (const auto *Call = Match.getNodeAs<CallExpr>("call"))
758 if (isClosingCallAsWritten(*Call))
820 escapeByStartIndexAndCount(ProgramStateRef State, const CallEvent &Call,
828 const LocationContext *LCtx = Call.getLocationContext();
845 EscapingVals, Call.getOriginExpr(), BlockCount, LCtx,
847 /*InvalidatedSymbols=*/nullptr, &Call, &ITraits);
851 const CallEvent &Call,
853 auto GetArgSVal = [&Call](int Idx) { return Call.getArgSVal(Idx); };
855 State = State->invalidateRegions(EscapingVals, Call.getOriginExpr(),
866 void StreamChecker::checkPreCall(const CallEvent &Call,
871 const FnDescription *Desc = lookupFn(Call);
875 Desc->PreFn(this, Desc, Call, C);
878 bool StreamChecker::evalCall(const CallEvent &Call, CheckerContext &C) const {
879 const FnDescription *Desc = lookupFn(Call);
881 Desc = FnTestDescriptions.lookup(Call);
885 Desc->EvalFn(this, Desc, Call, C);
890 void StreamChecker::evalFopen(const FnDescription *Desc, const CallEvent &Call,
893 const CallExpr *CE = dyn_cast_or_null<CallExpr>(Call.getOriginExpr());
919 void StreamChecker::preFreopen(const FnDescription *Desc, const CallEvent &Call,
923 State = ensureStreamNonNull(getStreamArg(Desc, Call),
924 Call.getArgExpr(Desc->StreamArgNo), C, State);
932 const CallEvent &Call,
936 auto *CE = dyn_cast_or_null<CallExpr>(Call.getOriginExpr());
941 getStreamArg(Desc, Call).getAs<DefinedSVal>();
977 void StreamChecker::evalFclose(const FnDescription *Desc, const CallEvent &Call,
981 if (!E.Init(Desc, Call, C, State))
994 void StreamChecker::preRead(const FnDescription *Desc, const CallEvent &Call,
997 SVal StreamVal = getStreamArg(Desc, Call);
998 State = ensureStreamNonNull(StreamVal, Call.getArgExpr(Desc->StreamArgNo), C,
1019 void StreamChecker::preWrite(const FnDescription *Desc, const CallEvent &Call,
1022 SVal StreamVal = getStreamArg(Desc, Call);
1023 State = ensureStreamNonNull(StreamVal, Call.getArgExpr(Desc->StreamArgNo), C,
1070 const CallEvent &Call, NonLoc SizeVal,
1074 dyn_cast_or_null<SubRegion>(Call.getArgSVal(0).getAsRegion());
1102 return escapeByStartIndexAndCount(State, Call, C.blockCount(), Buffer,
1111 const CallEvent &Call, CheckerContext &C,
1115 if (!E.Init(Desc, Call, C, State))
1118 std::optional<NonLoc> SizeVal = Call.getArgSVal(1).getAs<NonLoc>();
1121 std::optional<NonLoc> NMembVal = Call.getArgSVal(2).getAs<NonLoc>();
1144 State, C, Call, *SizeVal, *NMembVal);
1146 InvalidatedState ? InvalidatedState : escapeArgs(State, C, Call, {0});
1183 void StreamChecker::evalFgetx(const FnDescription *Desc, const CallEvent &Call,
1190 if (!E.Init(Desc, Call, C, State))
1196 State = escapeArgs(State, C, Call, {0});
1215 Call.getArgSVal(0).getAs<DefinedSVal>();
1242 void StreamChecker::evalFputx(const FnDescription *Desc, const CallEvent &Call,
1249 if (!E.Init(Desc, Call, C, State))
1254 std::optional<NonLoc> PutVal = Call.getArgSVal(0).getAs<NonLoc>();
1268 E.assumeBinOpNN(StateNotFailed, BO_GE, RetVal, E.getZeroVal(Call));
1288 const CallEvent &Call,
1290 if (Call.getNumArgs() < 2)
1295 if (!E.Init(Desc, Call, C, State))
1324 void StreamChecker::evalFscanf(const FnDescription *Desc, const CallEvent &Call,
1326 if (Call.getNumArgs() < 2)
1331 if (!E.Init(Desc, Call, C, State))
1347 E.assumeBinOpNN(StateNotFailed, BO_GE, RetVal, E.getZeroVal(Call));
1351 if (auto const *Callee = Call.getCalleeIdentifier();
1354 for (auto EscArg : llvm::seq(2u, Call.getNumArgs()))
1356 StateNotFailed = escapeArgs(StateNotFailed, C, Call, EscArgs);
1377 void StreamChecker::evalUngetc(const FnDescription *Desc, const CallEvent &Call,
1381 if (!E.Init(Desc, Call, C, State))
1385 std::optional<NonLoc> PutVal = Call.getArgSVal(0).getAs<NonLoc>();
1405 const CallEvent &Call,
1409 if (!E.Init(Desc, Call, C, State))
1421 State = escapeArgs(State, C, Call, {0, 1});
1427 E.assumeBinOpNN(StateNotFailed, BO_GE, RetVal, E.getZeroVal(Call));
1430 auto NewLinePtr = getPointeeVal(Call.getArgSVal(0), State);
1437 SVal SizePtrSval = Call.getArgSVal(1);
1458 if (auto NewLinePtr = getPointeeVal(Call.getArgSVal(0), State))
1464 void StreamChecker::preFseek(const FnDescription *Desc, const CallEvent &Call,
1467 SVal StreamVal = getStreamArg(Desc, Call);
1468 State = ensureStreamNonNull(StreamVal, Call.getArgExpr(Desc->StreamArgNo), C,
1475 State = ensureFseekWhenceCorrect(Call.getArgSVal(2), C, State);
1482 void StreamChecker::evalFseek(const FnDescription *Desc, const CallEvent &Call,
1486 if (!E.Init(Desc, Call, C, State))
1512 const CallEvent &Call,
1516 if (!E.Init(Desc, Call, C, State))
1521 StateNotFailed = escapeArgs(StateNotFailed, C, Call, {1});
1531 const CallEvent &Call,
1535 if (!E.Init(Desc, Call, C, State))
1558 void StreamChecker::evalFtell(const FnDescription *Desc, const CallEvent &Call,
1562 if (!E.Init(Desc, Call, C, State))
1569 E.assumeBinOpNN(StateNotFailed, BO_GE, RetVal, E.getZeroVal(Call));
1582 void StreamChecker::evalRewind(const FnDescription *Desc, const CallEvent &Call,
1586 if (!E.Init(Desc, Call, C, State))
1594 void StreamChecker::preFflush(const FnDescription *Desc, const CallEvent &Call,
1597 SVal StreamVal = getStreamArg(Desc, Call);
1609 void StreamChecker::evalFflush(const FnDescription *Desc, const CallEvent &Call,
1612 SVal StreamVal = getStreamArg(Desc, Call);
1628 const CallExpr *CE = dyn_cast_or_null<CallExpr>(Call.getOriginExpr());
1673 const CallEvent &Call,
1677 if (!E.Init(Desc, Call, C, State))
1688 const CallEvent &Call, CheckerContext &C,
1692 if (!E.Init(Desc, Call, C, State))
1717 void StreamChecker::evalFileno(const FnDescription *Desc, const CallEvent &Call,
1730 if (!E.Init(Desc, Call, C, State))
1735 State = E.assumeBinOpNN(State, BO_GE, RetVal, E.getZeroVal(Call));
1742 void StreamChecker::preDefault(const FnDescription *Desc, const CallEvent &Call,
1745 SVal StreamVal = getStreamArg(Desc, Call);
1746 State = ensureStreamNonNull(StreamVal, Call.getArgExpr(Desc->StreamArgNo), C,
1758 const CallEvent &Call, CheckerContext &C,
1762 SymbolRef StreamSym = getStreamArg(Desc, Call).getAsSymbol();
2000 const CallEvent *Call, PointerEscapeKind Kind) const {
2004 if (Kind == PSK_DirectEscapeOnCall && Call->isInSystemHeader())