diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-03-27 17:17:22 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-03-27 17:17:22 +0000 |
commit | 527556184b276c545be1355ad596fce29a0400fb (patch) | |
tree | f391aaff2a2fd1b6c58f1b30a259300f4ee176e8 | |
parent | 5c6422f36c5280046bbbcb54ff797639458a64ff (diff) |
Add creation of BasicObjCFoundationChecks when running GRSimpleVals from the driver.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@48886 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Analysis/BasicObjCFoundationChecks.cpp | 10 | ||||
-rw-r--r-- | lib/Analysis/BasicObjCFoundationChecks.h | 39 | ||||
-rw-r--r-- | lib/Analysis/GRSimpleVals.cpp | 12 |
3 files changed, 58 insertions, 3 deletions
diff --git a/lib/Analysis/BasicObjCFoundationChecks.cpp b/lib/Analysis/BasicObjCFoundationChecks.cpp index 0fae7ddcd3..4d7a4d99db 100644 --- a/lib/Analysis/BasicObjCFoundationChecks.cpp +++ b/lib/Analysis/BasicObjCFoundationChecks.cpp @@ -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 = diff --git a/lib/Analysis/BasicObjCFoundationChecks.h b/lib/Analysis/BasicObjCFoundationChecks.h new file mode 100644 index 0000000000..df2992b054 --- /dev/null +++ b/lib/Analysis/BasicObjCFoundationChecks.h @@ -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 diff --git a/lib/Analysis/GRSimpleVals.cpp b/lib/Analysis/GRSimpleVals.cpp index b6e6b5087f..520f6246bf 100644 --- a/lib/Analysis/GRSimpleVals.cpp +++ b/lib/Analysis/GRSimpleVals.cpp @@ -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); |