balazske created this revision. Herald added subscribers: cfe-commits, gamesh411, Szelethus, dkrupp. Herald added a project: clang.
Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D73350 Files: clang/lib/StaticAnalyzer/Checkers/StreamChecker.cpp Index: clang/lib/StaticAnalyzer/Checkers/StreamChecker.cpp =================================================================== --- clang/lib/StaticAnalyzer/Checkers/StreamChecker.cpp +++ clang/lib/StaticAnalyzer/Checkers/StreamChecker.cpp @@ -135,31 +135,32 @@ } void StreamChecker::evalFopen(const CallEvent &Call, CheckerContext &C) const { - ProgramStateRef state = C.getState(); - SValBuilder &svalBuilder = C.getSValBuilder(); + ProgramStateRef State = C.getState(); + SValBuilder &SVB = C.getSValBuilder(); const LocationContext *LCtx = C.getPredecessor()->getLocationContext(); + auto *CE = dyn_cast_or_null<CallExpr>(Call.getOriginExpr()); if (!CE) return; DefinedSVal RetVal = - svalBuilder.conjureSymbolVal(nullptr, CE, LCtx, C.blockCount()) + SVB.conjureSymbolVal(nullptr, CE, LCtx, C.blockCount()) .castAs<DefinedSVal>(); - state = state->BindExpr(CE, C.getLocationContext(), RetVal); + SymbolRef RetSym = RetVal.getAsSymbol(); + assert(RetSym && "RetVal must be a symbol here."); + + State = State->BindExpr(CE, C.getLocationContext(), RetVal); - ConstraintManager &CM = C.getConstraintManager(); // Bifurcate the state into two: one with a valid FILE* pointer, the other // with a NULL. - ProgramStateRef stateNotNull, stateNull; - std::tie(stateNotNull, stateNull) = CM.assumeDual(state, RetVal); + ProgramStateRef StateNotNull, StateNull; + std::tie(StateNotNull, StateNull) = C.getConstraintManager().assumeDual(State, RetVal); - SymbolRef Sym = RetVal.getAsSymbol(); - assert(Sym && "RetVal must be a symbol here."); - stateNotNull = stateNotNull->set<StreamMap>(Sym, StreamState::getOpened()); - stateNull = stateNull->set<StreamMap>(Sym, StreamState::getOpenFailed()); + StateNotNull = StateNotNull->set<StreamMap>(RetSym, StreamState::getOpened()); + StateNull = StateNull->set<StreamMap>(RetSym, StreamState::getOpenFailed()); - C.addTransition(stateNotNull); - C.addTransition(stateNull); + C.addTransition(StateNotNull); + C.addTransition(StateNull); } void StreamChecker::evalFreopen(const CallEvent &Call, @@ -228,8 +229,6 @@ if (!C.isDifferent() && StateChanged) C.addTransition(State); - - return; } void StreamChecker::checkArgNullStream(const CallEvent &Call, CheckerContext &C,
Index: clang/lib/StaticAnalyzer/Checkers/StreamChecker.cpp =================================================================== --- clang/lib/StaticAnalyzer/Checkers/StreamChecker.cpp +++ clang/lib/StaticAnalyzer/Checkers/StreamChecker.cpp @@ -135,31 +135,32 @@ } void StreamChecker::evalFopen(const CallEvent &Call, CheckerContext &C) const { - ProgramStateRef state = C.getState(); - SValBuilder &svalBuilder = C.getSValBuilder(); + ProgramStateRef State = C.getState(); + SValBuilder &SVB = C.getSValBuilder(); const LocationContext *LCtx = C.getPredecessor()->getLocationContext(); + auto *CE = dyn_cast_or_null<CallExpr>(Call.getOriginExpr()); if (!CE) return; DefinedSVal RetVal = - svalBuilder.conjureSymbolVal(nullptr, CE, LCtx, C.blockCount()) + SVB.conjureSymbolVal(nullptr, CE, LCtx, C.blockCount()) .castAs<DefinedSVal>(); - state = state->BindExpr(CE, C.getLocationContext(), RetVal); + SymbolRef RetSym = RetVal.getAsSymbol(); + assert(RetSym && "RetVal must be a symbol here."); + + State = State->BindExpr(CE, C.getLocationContext(), RetVal); - ConstraintManager &CM = C.getConstraintManager(); // Bifurcate the state into two: one with a valid FILE* pointer, the other // with a NULL. - ProgramStateRef stateNotNull, stateNull; - std::tie(stateNotNull, stateNull) = CM.assumeDual(state, RetVal); + ProgramStateRef StateNotNull, StateNull; + std::tie(StateNotNull, StateNull) = C.getConstraintManager().assumeDual(State, RetVal); - SymbolRef Sym = RetVal.getAsSymbol(); - assert(Sym && "RetVal must be a symbol here."); - stateNotNull = stateNotNull->set<StreamMap>(Sym, StreamState::getOpened()); - stateNull = stateNull->set<StreamMap>(Sym, StreamState::getOpenFailed()); + StateNotNull = StateNotNull->set<StreamMap>(RetSym, StreamState::getOpened()); + StateNull = StateNull->set<StreamMap>(RetSym, StreamState::getOpenFailed()); - C.addTransition(stateNotNull); - C.addTransition(stateNull); + C.addTransition(StateNotNull); + C.addTransition(StateNull); } void StreamChecker::evalFreopen(const CallEvent &Call, @@ -228,8 +229,6 @@ if (!C.isDifferent() && StateChanged) C.addTransition(State); - - return; } void StreamChecker::checkArgNullStream(const CallEvent &Call, CheckerContext &C,
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits