diff options
-rw-r--r-- | include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h | 13 | ||||
-rw-r--r-- | lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp | 12 |
2 files changed, 12 insertions, 13 deletions
diff --git a/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h b/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h index e1d30ecbcc..5960aced9c 100644 --- a/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h +++ b/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h @@ -18,20 +18,21 @@ #include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h" #include "llvm/ADT/ImmutableMap.h" -/// Declare an immutable map suitable for placement into the ProgramState. -#define REGISTER_MAP_WITH_PROGRAMSTATE(Map, Key, Value) \ - typedef llvm::ImmutableMap<Key, Value> Map; \ +/// Declares an immutable map of type NameTy, suitable for placement into +/// the ProgramState. The macro should not be used inside namespaces. +#define REGISTER_MAP_WITH_PROGRAMSTATE(Name, Key, Value) \ + class Name {}; \ + typedef llvm::ImmutableMap<Key, Value> Name ## Ty; \ namespace clang { \ namespace ento { \ template <> \ - struct ProgramStateTrait<Map> \ - : public ProgramStatePartialTrait<Map> { \ + struct ProgramStateTrait<Name> \ + : public ProgramStatePartialTrait<Name ## Ty> { \ static void *GDMIndex() { static int Index; return &Index; } \ }; \ } \ } - namespace clang { namespace ento { diff --git a/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp b/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp index 50b9fe02d1..5721b1041e 100644 --- a/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp @@ -106,9 +106,7 @@ void SimpleStreamChecker::checkPreStmt(const CallExpr *Call, CheckerContext &C) const { initIdentifierInfo(C.getASTContext()); - if (C.getCalleeIdentifier(Call) != IIfclose) - return; - if (Call->getNumArgs() != 1) + if (C.getCalleeIdentifier(Call) != IIfclose || Call->getNumArgs() != 1) return; // Get the symbolic value corresponding to the file handle. @@ -130,9 +128,9 @@ void SimpleStreamChecker::checkPreStmt(const CallExpr *Call, void SimpleStreamChecker::checkDeadSymbols(SymbolReaper &SymReaper, CheckerContext &C) const { ProgramStateRef State = C.getState(); - StreamMap TrackedStreams = State->get<StreamMap>(); + StreamMapTy TrackedStreams = State->get<StreamMap>(); SymbolVector LeakedStreams; - for (StreamMap::iterator I = TrackedStreams.begin(), + for (StreamMapTy::iterator I = TrackedStreams.begin(), E = TrackedStreams.end(); I != E; ++I) { SymbolRef Sym = I->first; if (SymReaper.isDead(Sym)) { @@ -154,9 +152,9 @@ void SimpleStreamChecker::checkDeadSymbols(SymbolReaper &SymReaper, ProgramStateRef SimpleStreamChecker::evalAssume(ProgramStateRef State, SVal Cond, bool Assumption) const { - StreamMap TrackedStreams = State->get<StreamMap>(); + StreamMapTy TrackedStreams = State->get<StreamMap>(); SymbolVector LeakedStreams; - for (StreamMap::iterator I = TrackedStreams.begin(), + for (StreamMapTy::iterator I = TrackedStreams.begin(), E = TrackedStreams.end(); I != E; ++I) { SymbolRef Sym = I->first; if (State->getConstraintManager().isNull(State, Sym).isTrue()) |