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