//
//===----------------------------------------------------------------------===//
+#include "BasicObjCFoundationChecks.h"
+
#include "clang/Analysis/PathSensitive/ExplodedGraph.h"
#include "clang/Analysis/PathSensitive/GRSimpleAPICheck.h"
#include "clang/Analysis/PathSensitive/ValueState.h"
} // end anonymous namespace
+GRSimpleAPICheck*
+clang::CreateBasicObjCFoundationChecks(ASTContext& Ctx,
+ ValueStateManager* VMgr) {
+
+ return new BasicObjCFoundationChecks(Ctx, VMgr);
+}
+
+
bool BasicObjCFoundationChecks::Audit(ExplodedNode<ValueState>* N) {
ObjCMessageExpr* ME =
--- /dev/null
+//== 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
//===----------------------------------------------------------------------===//
#include "GRSimpleVals.h"
+#include "BasicObjCFoundationChecks.h"
#include "clang/Analysis/PathSensitive/ValueState.h"
#include "clang/Basic/Diagnostic.h"
#include <sstream>
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);