aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h13
-rw-r--r--lib/StaticAnalyzer/Checkers/SimpleStreamChecker.cpp12
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())