forked from OSchip/llvm-project
[analyzer] Add checker helpers to CheckerContext.
- Adding Immutable Map to GDM and getIdentifierInfo helper method. llvm-svn: 166975
This commit is contained in:
parent
382df5eb18
commit
2ab0321b0d
|
@ -16,6 +16,21 @@
|
|||
#define LLVM_CLANG_SA_CORE_PATHSENSITIVE_CHECKERCONTEXT
|
||||
|
||||
#include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h"
|
||||
#include "llvm/ADT/ImmutableMap.h"
|
||||
|
||||
// Declare an immutable map suitable for placement into program states's GDM.
|
||||
#define REGISTER_MAP_WITH_GDM(Map, Key, Value) \
|
||||
typedef llvm::ImmutableMap<Key, Value> Map; \
|
||||
namespace clang { \
|
||||
namespace ento { \
|
||||
template <> \
|
||||
struct ProgramStateTrait<Map> \
|
||||
: public ProgramStatePartialTrait<Map> { \
|
||||
static void *GDMIndex() { static int Index; return &Index; } \
|
||||
}; \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
namespace clang {
|
||||
namespace ento {
|
||||
|
@ -197,6 +212,15 @@ public:
|
|||
/// \brief Get the name of the called function (path-sensitive).
|
||||
StringRef getCalleeName(const FunctionDecl *FunDecl) const;
|
||||
|
||||
/// \brief Get the identifier of the called function (path-sensitive).
|
||||
const IdentifierInfo *getCalleeIdentifier(const CallExpr *CE) const {
|
||||
const FunctionDecl *FunDecl = getCalleeDecl(CE);
|
||||
if (FunDecl)
|
||||
return FunDecl->getIdentifier();
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// \brief Get the name of the called function (path-sensitive).
|
||||
StringRef getCalleeName(const CallExpr *CE) const {
|
||||
const FunctionDecl *FunDecl = getCalleeDecl(CE);
|
||||
|
|
|
@ -406,11 +406,13 @@ ProgramStateRef StreamChecker::CheckDoubleClose(const CallExpr *CE,
|
|||
|
||||
void StreamChecker::checkDeadSymbols(SymbolReaper &SymReaper,
|
||||
CheckerContext &C) const {
|
||||
// TODO: Clean up the state.
|
||||
for (SymbolReaper::dead_iterator I = SymReaper.dead_begin(),
|
||||
E = SymReaper.dead_end(); I != E; ++I) {
|
||||
SymbolRef Sym = *I;
|
||||
ProgramStateRef state = C.getState();
|
||||
const StreamState *SS = state->get<StreamState>(Sym);
|
||||
// TODO: Shouldn't we have a continue here?
|
||||
if (!SS)
|
||||
return;
|
||||
|
||||
|
|
Loading…
Reference in New Issue