Add creation of BasicObjCFoundationChecks when running GRSimpleVals from the driver.
llvm-svn: 48886
This commit is contained in:
parent
f89469e392
commit
a4d60b6de3
|
@ -13,6 +13,8 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "BasicObjCFoundationChecks.h"
|
||||
|
||||
#include "clang/Analysis/PathSensitive/ExplodedGraph.h"
|
||||
#include "clang/Analysis/PathSensitive/GRSimpleAPICheck.h"
|
||||
#include "clang/Analysis/PathSensitive/ValueState.h"
|
||||
|
@ -53,6 +55,14 @@ public:
|
|||
} // end anonymous namespace
|
||||
|
||||
|
||||
GRSimpleAPICheck*
|
||||
clang::CreateBasicObjCFoundationChecks(ASTContext& Ctx,
|
||||
ValueStateManager* VMgr) {
|
||||
|
||||
return new BasicObjCFoundationChecks(Ctx, VMgr);
|
||||
}
|
||||
|
||||
|
||||
bool BasicObjCFoundationChecks::Audit(ExplodedNode<ValueState>* N) {
|
||||
|
||||
ObjCMessageExpr* ME =
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
//== BasicObjCFoundationChecks.h - Simple Apple-Foundation checks -*- C++ -*--//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// This file defines BasicObjCFoundationChecks, a class that encapsulates
|
||||
// a set of simple checks to run on Objective-C code using Apple's Foundation
|
||||
// classes.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "clang/Analysis/PathSensitive/ExplodedGraph.h"
|
||||
#include "clang/Analysis/PathSensitive/GRSimpleAPICheck.h"
|
||||
#include "clang/Analysis/PathSensitive/ValueState.h"
|
||||
#include "clang/Analysis/PathSensitive/AnnotatedPath.h"
|
||||
#include "clang/Analysis/PathDiagnostic.h"
|
||||
#include "clang/AST/Expr.h"
|
||||
#include "clang/AST/ASTContext.h"
|
||||
#include "llvm/Support/Compiler.h"
|
||||
|
||||
#ifndef LLVM_CLANG_ANALYSIS_BASICOBJCFOUNDATIONCHECKS
|
||||
#define LLVM_CLANG_ANALYSIS_BASICOBJCFOUNDATIONCHECKS
|
||||
|
||||
namespace clang {
|
||||
|
||||
class GRSimpleAPICheck;
|
||||
class ASTContext;
|
||||
class ValueStateManager;
|
||||
|
||||
GRSimpleAPICheck* CreateBasicObjCFoundationChecks(ASTContext& Ctx,
|
||||
ValueStateManager* VMgr);
|
||||
|
||||
} // end clang namespace
|
||||
|
||||
#endif
|
|
@ -14,6 +14,7 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "GRSimpleVals.h"
|
||||
#include "BasicObjCFoundationChecks.h"
|
||||
#include "clang/Analysis/PathSensitive/ValueState.h"
|
||||
#include "clang/Basic/Diagnostic.h"
|
||||
#include <sstream>
|
||||
|
@ -103,14 +104,19 @@ void EmitWarning(Diagnostic& Diag, SourceManager& SrcMgr,
|
|||
unsigned RunGRSimpleVals(CFG& cfg, Decl& CD, ASTContext& Ctx,
|
||||
Diagnostic& Diag, bool Visualize, bool TrimGraph) {
|
||||
|
||||
if (Diag.hasErrorOccurred())
|
||||
return 0;
|
||||
|
||||
GRCoreEngine<GRExprEngine> Eng(cfg, CD, Ctx);
|
||||
GRExprEngine* CheckerState = &Eng.getCheckerState();
|
||||
|
||||
// Set base transfer functions.
|
||||
GRSimpleVals GRSV;
|
||||
CheckerState->setTransferFunctions(GRSV);
|
||||
|
||||
// Add extra checkers.
|
||||
llvm::OwningPtr<GRSimpleAPICheck> FoundationCheck(
|
||||
CreateBasicObjCFoundationChecks(Ctx, &CheckerState->getStateManager()));
|
||||
|
||||
CheckerState->AddObjCMessageExprCheck(FoundationCheck.get());
|
||||
|
||||
// Execute the worklist algorithm.
|
||||
Eng.ExecuteWorkList(100000);
|
||||
|
||||
|
|
Loading…
Reference in New Issue