Add creation of BasicObjCFoundationChecks when running GRSimpleVals from the driver.

llvm-svn: 48886
This commit is contained in:
Ted Kremenek 2008-03-27 17:17:22 +00:00
parent f89469e392
commit a4d60b6de3
3 changed files with 58 additions and 3 deletions

View File

@ -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 =

View File

@ -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

View File

@ -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);