From c4f0f8ec41fddb5c3501ef3c708ee4c75fbea742 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20K=C3=A9ri?= <1.int32@gmail.com> Date: Fri, 7 Feb 2020 09:09:45 +0100 Subject: [PATCH] [analyzer] Small StreamChecker refactoring (NFC). Reviewers: Szelethus Reviewed By: Szelethus Subscribers: xazax.hun, baloghadamsoftware, szepet, a.sidorin, mikhail.ramalho, donat.nagy, Charusso, dkrupp, Szelethus, gamesh411, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D73350 --- .../StaticAnalyzer/Checkers/StreamChecker.cpp | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/clang/lib/StaticAnalyzer/Checkers/StreamChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/StreamChecker.cpp index 47099f2afb6a..dc6bd4f1544e 100644 --- a/clang/lib/StaticAnalyzer/Checkers/StreamChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/StreamChecker.cpp @@ -135,31 +135,32 @@ bool StreamChecker::evalCall(const CallEvent &Call, CheckerContext &C) const { } 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(Call.getOriginExpr()); if (!CE) return; - DefinedSVal RetVal = - svalBuilder.conjureSymbolVal(nullptr, CE, LCtx, C.blockCount()) - .castAs(); - state = state->BindExpr(CE, C.getLocationContext(), RetVal); + DefinedSVal RetVal = SVB.conjureSymbolVal(nullptr, CE, LCtx, C.blockCount()) + .castAs(); + 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(Sym, StreamState::getOpened()); - stateNull = stateNull->set(Sym, StreamState::getOpenFailed()); + StateNotNull = StateNotNull->set(RetSym, StreamState::getOpened()); + StateNull = StateNull->set(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 @@ void StreamChecker::evalFseek(const CallEvent &Call, CheckerContext &C) const { if (!C.isDifferent() && StateChanged) C.addTransition(State); - - return; } void StreamChecker::checkArgNullStream(const CallEvent &Call, CheckerContext &C,