From 14fe9f363163c78ff8bd7f6f29897e8215fc6cd5 Mon Sep 17 00:00:00 2001 From: Jordan Rose Date: Thu, 1 Nov 2012 00:18:27 +0000 Subject: [PATCH] [analyzer] Rename ConditionTruthVal::isTrue to isConstrainedTrue. (and the same for isFalse) No functionality change. llvm-svn: 167186 --- .../StaticAnalyzer/Core/PathSensitive/ConstraintManager.h | 4 ++-- clang/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp | 8 ++++++-- clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp | 9 +++++++-- clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp | 4 +++- clang/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp | 11 +++++++---- 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h index 9af59e4..6f1e70b 100644 --- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h +++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h @@ -38,12 +38,12 @@ public: ConditionTruthVal() {} /// Return true if the constraint is perfectly constrained to 'true'. - bool isTrue() const { + bool isConstrainedTrue() const { return Val.hasValue() && Val.getValue(); } /// Return true if the constraint is perfectly constrained to 'false'. - bool isFalse() const { + bool isConstrainedFalse() const { return Val.hasValue() && !Val.getValue(); } diff --git a/clang/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp index 21db9e6..7dbbe2c 100644 --- a/clang/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/MacOSKeychainAPIChecker.cpp @@ -585,7 +585,9 @@ void MacOSKeychainAPIChecker::checkDeadSymbols(SymbolReaper &SR, State = State->remove(I->first); // If the allocated symbol is null or if the allocation call might have // returned an error, do not report. - if (State->getConstraintManager().isNull(State, I->first).isTrue() || + ConstraintManager &CMgr = State->getConstraintManager(); + ConditionTruthVal AllocFailed = CMgr.isNull(State, I.getKey()); + if (AllocFailed.isConstrainedTrue() || definitelyReturnedError(I->second.Region, State, C.getSValBuilder())) continue; Errors.push_back(std::make_pair(I->first, &I->second)); @@ -630,7 +632,9 @@ void MacOSKeychainAPIChecker::checkEndPath(CheckerContext &C) const { state = state->remove(I->first); // If the allocated symbol is null or if error code was returned at // allocation, do not report. - if (state->getConstraintManager().isNull(state, I.getKey()).isTrue() || + ConstraintManager &CMgr = state->getConstraintManager(); + ConditionTruthVal AllocFailed = CMgr.isNull(state, I.getKey()); + if (AllocFailed.isConstrainedTrue() || definitelyReturnedError(I->second.Region, state, C.getSValBuilder())) { continue; diff --git a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp index 24a38a6..1a6e250 100644 --- a/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp @@ -1292,7 +1292,9 @@ ProgramStateRef MallocChecker::evalAssume(ProgramStateRef state, RegionStateTy RS = state->get(); for (RegionStateTy::iterator I = RS.begin(), E = RS.end(); I != E; ++I) { // If the symbol is assumed to be NULL, remove it from consideration. - if (state->getConstraintManager().isNull(state, I.getKey()).isTrue()) + ConstraintManager &CMgr = state->getConstraintManager(); + ConditionTruthVal AllocFailed = CMgr.isNull(state, I.getKey()); + if (AllocFailed.isConstrainedTrue()) state = state->remove(I.getKey()); } @@ -1301,8 +1303,11 @@ ProgramStateRef MallocChecker::evalAssume(ProgramStateRef state, ReallocMap RP = state->get(); for (ReallocMap::iterator I = RP.begin(), E = RP.end(); I != E; ++I) { // If the symbol is assumed to be NULL, remove it from consideration. - if (!state->getConstraintManager().isNull(state, I.getKey()).isTrue()) + ConstraintManager &CMgr = state->getConstraintManager(); + ConditionTruthVal AllocFailed = CMgr.isNull(state, I.getKey()); + if (AllocFailed.isConstrainedTrue()) continue; + SymbolRef ReallocSym = I.getData().ReallocatedSym; if (const RefState *RS = state->get(ReallocSym)) { if (RS->isReleased()) { diff --git a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp index 36e17fa..274eef8 100644 --- a/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp @@ -3448,7 +3448,9 @@ ProgramStateRef RetainCountChecker::evalAssume(ProgramStateRef state, for (RefBindings::iterator I = B.begin(), E = B.end(); I != E; ++I) { // Check if the symbol is null stop tracking the symbol. - if (state->getConstraintManager().isNull(state, I.getKey()).isTrue()) { + ConstraintManager &CMgr = state->getConstraintManager(); + ConditionTruthVal AllocFailed = CMgr.isNull(state, I.getKey()); + if (AllocFailed.isConstrainedTrue()) { changed = true; B = RefBFactory.remove(B, I.getKey()); } diff --git a/clang/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp index d62002c..22176fd 100644 --- a/clang/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp @@ -140,16 +140,19 @@ void SimpleStreamChecker::checkDeadSymbols(SymbolReaper &SymReaper, CheckerContext &C) const { ProgramStateRef State = C.getState(); StreamMapTy TrackedStreams = State->get(); + SymbolVector LeakedStreams; for (StreamMapTy::iterator I = TrackedStreams.begin(), - E = TrackedStreams.end(); I != E; ++I) { + E = TrackedStreams.end(); I != E; ++I) { SymbolRef Sym = I->first; if (SymReaper.isDead(Sym)) { const StreamState &SS = I->second; if (SS.isOpened()) { - // If a symbolic region is NULL, assume that allocation failed on - // this path and do not report a leak. - if (!State->getConstraintManager().isNull(State, Sym).isTrue()) + // If a symbol is NULL, assume that fopen failed on this path + // and do not report a leak. + ConstraintManager &CMgr = State->getConstraintManager(); + ConditionTruthVal OpenFailed = CMgr.isNull(State, Sym); + if (!OpenFailed.isConstrainedTrue()) LeakedStreams.push_back(Sym); } -- 2.7.4