Lines Matching refs:C

186 DefinedSVal makeRetVal(CheckerContext &C, const CallExpr *CE) {  in makeRetVal()  argument
189 const LocationContext *LCtx = C.getLocationContext(); in makeRetVal()
190 return C.getSValBuilder() in makeRetVal()
191 .conjureSymbolVal(nullptr, CE, LCtx, C.blockCount()) in makeRetVal()
195 ProgramStateRef bindAndAssumeTrue(ProgramStateRef State, CheckerContext &C, in bindAndAssumeTrue() argument
197 DefinedSVal RetVal = makeRetVal(C, CE); in bindAndAssumeTrue()
198 State = State->BindExpr(CE, C.getLocationContext(), RetVal); in bindAndAssumeTrue()
205 CheckerContext &C, const CallExpr *CE) { in bindInt() argument
206 State = State->BindExpr(CE, C.getLocationContext(), in bindInt()
207 C.getSValBuilder().makeIntVal(Value, CE->getType())); in bindInt()
226 void checkPreCall(const CallEvent &Call, CheckerContext &C) const;
227 bool evalCall(const CallEvent &Call, CheckerContext &C) const;
228 void checkDeadSymbols(SymbolReaper &SymReaper, CheckerContext &C) const;
332 CheckerContext &C) const;
335 CheckerContext &C) const;
337 CheckerContext &C) const;
340 CheckerContext &C) const;
343 CheckerContext &C, bool IsRead) const;
346 CheckerContext &C, bool IsFread) const;
349 CheckerContext &C, bool SingleChar) const;
352 CheckerContext &C, bool IsSingleChar) const;
355 CheckerContext &C) const;
358 CheckerContext &C) const;
361 CheckerContext &C) const;
364 CheckerContext &C) const;
367 CheckerContext &C) const;
369 CheckerContext &C) const;
372 CheckerContext &C) const;
375 CheckerContext &C) const;
378 CheckerContext &C) const;
381 CheckerContext &C) const;
384 CheckerContext &C) const;
387 CheckerContext &C) const;
390 CheckerContext &C,
394 CheckerContext &C,
398 CheckerContext &C) const;
401 CheckerContext &C) const;
408 CheckerContext &C,
414 ProgramStateRef ensureStreamOpened(SVal StreamVal, CheckerContext &C,
424 ensureNoFilePositionIndeterminate(SVal StreamVal, CheckerContext &C,
431 ProgramStateRef ensureFseekWhenceCorrect(SVal WhenceVal, CheckerContext &C,
438 void reportFEofWarning(SymbolRef StreamSym, CheckerContext &C,
445 CheckerContext &C, ExplodedNode *Pred) const;
465 const NoteTag *constructNoteTag(CheckerContext &C, SymbolRef StreamSym, in constructNoteTag() argument
467 return C.getNoteTag([this, StreamSym, in constructNoteTag()
475 const NoteTag *constructSetEofNoteTag(CheckerContext &C, in constructSetEofNoteTag() argument
477 return C.getNoteTag([this, StreamSym](PathSensitiveBugReport &BR) { in constructSetEofNoteTag()
488 void initMacroValues(CheckerContext &C) const { in initMacroValues()
493 tryExpandAsInteger("EOF", C.getPreprocessor())) in initMacroValues()
498 tryExpandAsInteger("SEEK_SET", C.getPreprocessor())) in initMacroValues()
501 tryExpandAsInteger("SEEK_END", C.getPreprocessor())) in initMacroValues()
504 tryExpandAsInteger("SEEK_CUR", C.getPreprocessor())) in initMacroValues()
512 CheckerContext &C);
528 CheckerContext &C) { in getAcquisitionSite() argument
552 CheckerContext &C) const { in checkPreCall()
553 initMacroValues(C); in checkPreCall()
559 Desc->PreFn(this, Desc, Call, C); in checkPreCall()
562 bool StreamChecker::evalCall(const CallEvent &Call, CheckerContext &C) const { in evalCall()
569 Desc->EvalFn(this, Desc, Call, C); in evalCall()
571 return C.isDifferent(); in evalCall()
575 CheckerContext &C) const { in evalFopen()
576 ProgramStateRef State = C.getState(); in evalFopen()
581 DefinedSVal RetVal = makeRetVal(C, CE); in evalFopen()
585 State = State->BindExpr(CE, C.getLocationContext(), RetVal); in evalFopen()
591 C.getConstraintManager().assumeDual(State, RetVal); in evalFopen()
598 C.addTransition(StateNotNull, in evalFopen()
599 constructNoteTag(C, RetSym, "Stream opened here")); in evalFopen()
600 C.addTransition(StateNull); in evalFopen()
604 CheckerContext &C) const { in preFreopen()
606 ProgramStateRef State = C.getState(); in preFreopen()
608 Call.getArgExpr(Desc->StreamArgNo), C, State); in preFreopen()
612 C.addTransition(State); in preFreopen()
617 CheckerContext &C) const { in evalFreopen()
618 ProgramStateRef State = C.getState(); in evalFreopen()
644 State->BindExpr(CE, C.getLocationContext(), *StreamVal); in evalFreopen()
648 State->BindExpr(CE, C.getLocationContext(), in evalFreopen()
649 C.getSValBuilder().makeNullWithType(CE->getType())); in evalFreopen()
656 C.addTransition(StateRetNotNull, in evalFreopen()
657 constructNoteTag(C, StreamSym, "Stream reopened here")); in evalFreopen()
658 C.addTransition(StateRetNull); in evalFreopen()
662 CheckerContext &C) const { in evalFclose()
663 ProgramStateRef State = C.getState(); in evalFclose()
684 SValBuilder &SVB = C.getSValBuilder(); in evalFclose()
686 CE, C.getLocationContext(), SVB.makeIntVal(0, C.getASTContext().IntTy)); in evalFclose()
688 State->BindExpr(CE, C.getLocationContext(), in evalFclose()
689 SVB.makeIntVal(*EofVal, C.getASTContext().IntTy)); in evalFclose()
691 C.addTransition(StateSuccess); in evalFclose()
692 C.addTransition(StateFailure); in evalFclose()
696 const CallEvent &Call, CheckerContext &C, in preReadWrite() argument
698 ProgramStateRef State = C.getState(); in preReadWrite()
700 State = ensureStreamNonNull(StreamVal, Call.getArgExpr(Desc->StreamArgNo), C, in preReadWrite()
704 State = ensureStreamOpened(StreamVal, C, State); in preReadWrite()
707 State = ensureNoFilePositionIndeterminate(StreamVal, C, State); in preReadWrite()
712 C.addTransition(State); in preReadWrite()
720 reportFEofWarning(Sym, C, State); in preReadWrite()
722 C.addTransition(State); in preReadWrite()
727 const CallEvent &Call, CheckerContext &C, in evalFreadFwrite() argument
729 ProgramStateRef State = C.getState(); in evalFreadFwrite()
761 State = bindInt(0, State, C, CE); in evalFreadFwrite()
762 C.addTransition(State); in evalFreadFwrite()
770 State->BindExpr(CE, C.getLocationContext(), *NMembVal); in evalFreadFwrite()
773 C.addTransition(StateNotFailed); in evalFreadFwrite()
777 NonLoc RetVal = makeRetVal(C, CE).castAs<NonLoc>(); in evalFreadFwrite()
779 State->BindExpr(CE, C.getLocationContext(), RetVal); in evalFreadFwrite()
780 SValBuilder &SVB = C.getSValBuilder(); in evalFreadFwrite()
801 C.addTransition(StateFailed, constructSetEofNoteTag(C, StreamSym)); in evalFreadFwrite()
803 C.addTransition(StateFailed); in evalFreadFwrite()
807 CheckerContext &C, bool SingleChar) const { in evalFgetx() argument
808 ProgramStateRef State = C.getState(); in evalFgetx()
829 NonLoc RetVal = makeRetVal(C, CE).castAs<NonLoc>(); in evalFgetx()
831 State->BindExpr(CE, C.getLocationContext(), RetVal); in evalFgetx()
832 SValBuilder &SVB = C.getSValBuilder(); in evalFgetx()
833 ASTContext &ASTC = C.getASTContext(); in evalFgetx()
856 C.addTransition(StateNotFailed); in evalFgetx()
864 State->BindExpr(CE, C.getLocationContext(), *GetBuf); in evalFgetx()
867 C.addTransition(StateNotFailed); in evalFgetx()
874 StateFailed = bindInt(*EofVal, State, C, CE); in evalFgetx()
877 State->BindExpr(CE, C.getLocationContext(), in evalFgetx()
878 C.getSValBuilder().makeNullWithType(CE->getType())); in evalFgetx()
887 C.addTransition(StateFailed, constructSetEofNoteTag(C, StreamSym)); in evalFgetx()
889 C.addTransition(StateFailed); in evalFgetx()
893 CheckerContext &C, bool IsSingleChar) const { in evalFputx() argument
894 ProgramStateRef State = C.getState(); in evalFputx()
918 State->BindExpr(CE, C.getLocationContext(), *PutVal); in evalFputx()
921 C.addTransition(StateNotFailed); in evalFputx()
924 NonLoc RetVal = makeRetVal(C, CE).castAs<NonLoc>(); in evalFputx()
926 State->BindExpr(CE, C.getLocationContext(), RetVal); in evalFputx()
927 SValBuilder &SVB = C.getSValBuilder(); in evalFputx()
928 auto &ASTC = C.getASTContext(); in evalFputx()
939 C.addTransition(StateNotFailed); in evalFputx()
944 ProgramStateRef StateFailed = bindInt(*EofVal, State, C, CE); in evalFputx()
947 C.addTransition(StateFailed); in evalFputx()
952 CheckerContext &C) const { in evalFprintf()
953 ProgramStateRef State = C.getState(); in evalFprintf()
970 NonLoc RetVal = makeRetVal(C, CE).castAs<NonLoc>(); in evalFprintf()
971 State = State->BindExpr(CE, C.getLocationContext(), RetVal); in evalFprintf()
972 SValBuilder &SVB = C.getSValBuilder(); in evalFprintf()
973 auto &ACtx = C.getASTContext(); in evalFprintf()
984 C.addTransition(StateNotFailed); in evalFprintf()
990 C.addTransition(StateFailed); in evalFprintf()
994 CheckerContext &C) const { in evalFscanf()
995 ProgramStateRef State = C.getState(); in evalFscanf()
1012 SValBuilder &SVB = C.getSValBuilder(); in evalFscanf()
1013 ASTContext &ACtx = C.getASTContext(); in evalFscanf()
1024 NonLoc RetVal = makeRetVal(C, CE).castAs<NonLoc>(); in evalFscanf()
1026 State->BindExpr(CE, C.getLocationContext(), RetVal); in evalFscanf()
1035 C.addTransition(StateNotFailed); in evalFscanf()
1044 ProgramStateRef StateFailed = bindInt(*EofVal, State, C, CE); in evalFscanf()
1051 C.addTransition(StateFailed, constructSetEofNoteTag(C, StreamSym)); in evalFscanf()
1053 C.addTransition(StateFailed); in evalFscanf()
1057 CheckerContext &C) const { in evalUngetc()
1058 ProgramStateRef State = C.getState(); in evalUngetc()
1078 State->BindExpr(CE, C.getLocationContext(), *PutVal); in evalUngetc()
1081 C.addTransition(StateNotFailed); in evalUngetc()
1089 ProgramStateRef StateFailed = bindInt(*EofVal, State, C, CE); in evalUngetc()
1092 C.addTransition(StateFailed); in evalUngetc()
1097 CheckerContext &C) const { in evalGetdelim()
1098 ProgramStateRef State = C.getState(); in evalGetdelim()
1121 NonLoc RetVal = makeRetVal(C, CE).castAs<NonLoc>(); in evalGetdelim()
1123 State->BindExpr(CE, C.getLocationContext(), RetVal); in evalGetdelim()
1124 SValBuilder &SVB = C.getSValBuilder(); in evalGetdelim()
1134 C.addTransition(StateNotFailed); in evalGetdelim()
1140 ProgramStateRef StateFailed = bindInt(-1, State, C, CE); in evalGetdelim()
1146 C.addTransition(StateFailed, constructSetEofNoteTag(C, StreamSym)); in evalGetdelim()
1148 C.addTransition(StateFailed); in evalGetdelim()
1152 CheckerContext &C) const { in preFseek()
1153 ProgramStateRef State = C.getState(); in preFseek()
1155 State = ensureStreamNonNull(StreamVal, Call.getArgExpr(Desc->StreamArgNo), C, in preFseek()
1159 State = ensureStreamOpened(StreamVal, C, State); in preFseek()
1162 State = ensureFseekWhenceCorrect(Call.getArgSVal(2), C, State); in preFseek()
1166 C.addTransition(State); in preFseek()
1170 CheckerContext &C) const { in evalFseek()
1171 ProgramStateRef State = C.getState(); in evalFseek()
1185 C.getSValBuilder().getKnownValue(State, Call.getArgSVal(1)); in evalFseek()
1187 C.getSValBuilder().getKnownValue(State, Call.getArgSVal(2)); in evalFseek()
1189 DefinedSVal RetVal = makeRetVal(C, CE); in evalFseek()
1192 State = State->BindExpr(CE, C.getLocationContext(), RetVal); in evalFseek()
1198 C.getConstraintManager().assumeDual(State, RetVal); in evalFseek()
1214 C.addTransition(StateNotFailed); in evalFseek()
1215 C.addTransition(StateFailed, constructSetEofNoteTag(C, StreamSym)); in evalFseek()
1220 CheckerContext &C) const { in evalFgetpos()
1221 ProgramStateRef State = C.getState(); in evalFgetpos()
1234 DefinedSVal RetVal = makeRetVal(C, CE); in evalFgetpos()
1235 State = State->BindExpr(CE, C.getLocationContext(), RetVal); in evalFgetpos()
1238 C.getConstraintManager().assumeDual(State, RetVal); in evalFgetpos()
1243 C.addTransition(StateNotFailed); in evalFgetpos()
1244 C.addTransition(StateFailed); in evalFgetpos()
1249 CheckerContext &C) const { in evalFsetpos()
1250 ProgramStateRef State = C.getState(); in evalFsetpos()
1265 DefinedSVal RetVal = makeRetVal(C, CE); in evalFsetpos()
1266 State = State->BindExpr(CE, C.getLocationContext(), RetVal); in evalFsetpos()
1269 C.getConstraintManager().assumeDual(State, RetVal); in evalFsetpos()
1281 C.addTransition(StateNotFailed); in evalFsetpos()
1282 C.addTransition(StateFailed); in evalFsetpos()
1286 CheckerContext &C) const { in evalFtell()
1287 ProgramStateRef State = C.getState(); in evalFtell()
1299 SValBuilder &SVB = C.getSValBuilder(); in evalFtell()
1300 NonLoc RetVal = makeRetVal(C, CE).castAs<NonLoc>(); in evalFtell()
1302 State->BindExpr(CE, C.getLocationContext(), RetVal); in evalFtell()
1314 CE, C.getLocationContext(), SVB.makeIntVal(-1, Call.getResultType())); in evalFtell()
1319 C.addTransition(StateNotFailed); in evalFtell()
1320 C.addTransition(StateFailed); in evalFtell()
1324 CheckerContext &C) const { in evalRewind()
1325 ProgramStateRef State = C.getState(); in evalRewind()
1343 C.addTransition(State); in evalRewind()
1348 CheckerContext &C) const { in evalClearerr()
1349 ProgramStateRef State = C.getState(); in evalClearerr()
1364 C.addTransition(State); in evalClearerr()
1368 const CallEvent &Call, CheckerContext &C, in evalFeofFerror() argument
1370 ProgramStateRef State = C.getState(); in evalFeofFerror()
1389 ProgramStateRef TrueState = bindAndAssumeTrue(State, C, CE); in evalFeofFerror()
1390 C.addTransition(TrueState->set<StreamMap>( in evalFeofFerror()
1399 ProgramStateRef FalseState = bindInt(0, State, C, CE); in evalFeofFerror()
1400 C.addTransition(FalseState->set<StreamMap>( in evalFeofFerror()
1408 CheckerContext &C) const { in preDefault()
1409 ProgramStateRef State = C.getState(); in preDefault()
1411 State = ensureStreamNonNull(StreamVal, Call.getArgExpr(Desc->StreamArgNo), C, in preDefault()
1415 State = ensureStreamOpened(StreamVal, C, State); in preDefault()
1419 C.addTransition(State); in preDefault()
1423 const CallEvent &Call, CheckerContext &C, in evalSetFeofFerror() argument
1425 ProgramStateRef State = C.getState(); in evalSetFeofFerror()
1432 C.addTransition(State); in evalSetFeofFerror()
1436 CheckerContext &C) const { in preFflush()
1437 ProgramStateRef State = C.getState(); in preFflush()
1445 C.getConstraintManager().assumeDual(State, *Stream); in preFflush()
1447 ensureStreamOpened(StreamVal, C, StateNotNull); in preFflush()
1451 CheckerContext &C) const { in evalFflush()
1452 ProgramStateRef State = C.getState(); in evalFflush()
1461 C.getConstraintManager().assumeDual(State, *Stream); in evalFflush()
1474 ProgramStateRef StateFailed = bindInt(*EofVal, State, C, CE); in evalFflush()
1475 ProgramStateRef StateNotFailed = bindInt(0, State, C, CE); in evalFflush()
1509 C.addTransition(StateNotFailed); in evalFflush()
1510 C.addTransition(StateFailed); in evalFflush()
1515 CheckerContext &C, in ensureStreamNonNull() argument
1521 ConstraintManager &CM = C.getConstraintManager(); in ensureStreamNonNull()
1527 if (ExplodedNode *N = C.generateErrorNode(StateNull)) { in ensureStreamNonNull()
1532 C.emitReport(std::move(R)); in ensureStreamNonNull()
1541 CheckerContext &C, in ensureStreamOpened() argument
1554 ExplodedNode *N = C.generateErrorNode(); in ensureStreamOpened()
1556 C.emitReport(std::make_unique<PathSensitiveBugReport>( in ensureStreamOpened()
1570 ExplodedNode *N = C.generateErrorNode(); in ensureStreamOpened()
1572 C.emitReport(std::make_unique<PathSensitiveBugReport>( in ensureStreamOpened()
1586 SVal StreamVal, CheckerContext &C, ProgramStateRef State) const { in ensureNoFilePositionIndeterminate() argument
1607 ExplodedNode *N = C.generateNonFatalErrorNode(State); in ensureNoFilePositionIndeterminate()
1611 C.emitReport(std::make_unique<PathSensitiveBugReport>( in ensureNoFilePositionIndeterminate()
1619 ExplodedNode *N = C.generateErrorNode(State); in ensureNoFilePositionIndeterminate()
1621 C.emitReport(std::make_unique<PathSensitiveBugReport>( in ensureNoFilePositionIndeterminate()
1631 StreamChecker::ensureFseekWhenceCorrect(SVal WhenceVal, CheckerContext &C, in ensureFseekWhenceCorrect() argument
1642 if (ExplodedNode *N = C.generateNonFatalErrorNode(State)) { in ensureFseekWhenceCorrect()
1643 C.emitReport(std::make_unique<PathSensitiveBugReport>( in ensureFseekWhenceCorrect()
1654 void StreamChecker::reportFEofWarning(SymbolRef StreamSym, CheckerContext &C, in reportFEofWarning() argument
1656 if (ExplodedNode *N = C.generateNonFatalErrorNode(State)) { in reportFEofWarning()
1663 C.emitReport(std::move(R)); in reportFEofWarning()
1666 C.addTransition(State); in reportFEofWarning()
1671 CheckerContext &C, ExplodedNode *Pred) const { in reportLeaks() argument
1672 ExplodedNode *Err = C.generateNonFatalErrorNode(C.getState(), Pred); in reportLeaks()
1688 const ExplodedNode *StreamOpenNode = getAcquisitionSite(Err, LeakSym, C); in reportLeaks()
1694 StreamStmt, C.getSourceManager(), in reportLeaks()
1704 C.emitReport(std::move(R)); in reportLeaks()
1711 CheckerContext &C) const { in checkDeadSymbols()
1712 ProgramStateRef State = C.getState(); in checkDeadSymbols()
1727 ExplodedNode *N = C.getPredecessor(); in checkDeadSymbols()
1729 N = reportLeaks(LeakedSyms, C, N); in checkDeadSymbols()
1731 C.addTransition(State, N); in checkDeadSymbols()