summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-02-28 01:27:02 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-02-28 01:27:02 +0000
commitb2cf708395328da8b00181fbc935b5326ca594ed (patch)
tree35aab794aca5ffe9eff8f38e0e06cb0013688dfe /clang/lib/StaticAnalyzer
parent0a9ce3ec8fd22e1a29af0621671f866154850dc7 (diff)
downloadbcm5719-llvm-b2cf708395328da8b00181fbc935b5326ca594ed.tar.gz
bcm5719-llvm-b2cf708395328da8b00181fbc935b5326ca594ed.zip
[analyzer] Migrate OSAtomicChecker to CheckerV2.
llvm-svn: 126610
Diffstat (limited to 'clang/lib/StaticAnalyzer')
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/Checkers.td5
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/ExprEngine.cpp1
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/InternalChecks.h3
-rw-r--r--clang/lib/StaticAnalyzer/Checkers/OSAtomicChecker.cpp23
4 files changed, 17 insertions, 15 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/Checkers.td b/clang/lib/StaticAnalyzer/Checkers/Checkers.td
index 801efef5b71..c453da96cf4 100644
--- a/clang/lib/StaticAnalyzer/Checkers/Checkers.td
+++ b/clang/lib/StaticAnalyzer/Checkers/Checkers.td
@@ -93,6 +93,11 @@ def MacOSXAPIChecker : Checker<"API">,
HelpText<"Check for proper uses of various Mac OS X APIs">,
DescFile<"MacOSXAPIChecker.cpp">;
+def OSAtomicChecker : Checker<"AtomicCAS">,
+ InPackage<MacOSX>,
+ HelpText<"Evaluate calls to OSAtomic functions">,
+ DescFile<"OSAtomicChecker.cpp">;
+
def CFNumberCreateChecker : Checker<"CFNumber">,
InPackage<MacOSX>,
HelpText<"Check for proper uses of CFNumberCreate">,
diff --git a/clang/lib/StaticAnalyzer/Checkers/ExprEngine.cpp b/clang/lib/StaticAnalyzer/Checkers/ExprEngine.cpp
index afa97d0d974..14c29dd4b5a 100644
--- a/clang/lib/StaticAnalyzer/Checkers/ExprEngine.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/ExprEngine.cpp
@@ -337,7 +337,6 @@ static void RegisterInternalChecks(ExprEngine &Eng) {
// This is not a checker yet.
RegisterNoReturnFunctionChecker(Eng);
RegisterBuiltinFunctionChecker(Eng);
- RegisterOSAtomicChecker(Eng);
}
ExprEngine::ExprEngine(AnalysisManager &mgr, TransferFuncs *tf)
diff --git a/clang/lib/StaticAnalyzer/Checkers/InternalChecks.h b/clang/lib/StaticAnalyzer/Checkers/InternalChecks.h
index 3845a69d36f..5714aca7609 100644
--- a/clang/lib/StaticAnalyzer/Checkers/InternalChecks.h
+++ b/clang/lib/StaticAnalyzer/Checkers/InternalChecks.h
@@ -37,9 +37,6 @@ void RegisterUndefinedArraySubscriptChecker(ExprEngine &Eng);
void RegisterUndefinedAssignmentChecker(ExprEngine &Eng);
void RegisterVLASizeChecker(ExprEngine &Eng);
-// API checks.
-void RegisterOSAtomicChecker(ExprEngine &Eng);
-
} // end GR namespace
} // end clang namespace
diff --git a/clang/lib/StaticAnalyzer/Checkers/OSAtomicChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/OSAtomicChecker.cpp
index e1126b617b7..da5d1515933 100644
--- a/clang/lib/StaticAnalyzer/Checkers/OSAtomicChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/OSAtomicChecker.cpp
@@ -11,8 +11,10 @@
//
//===----------------------------------------------------------------------===//
-#include "InternalChecks.h"
-#include "clang/StaticAnalyzer/Core/PathSensitive/Checker.h"
+#include "ClangSACheckers.h"
+#include "clang/StaticAnalyzer/Core/CheckerV2.h"
+#include "clang/StaticAnalyzer/Core/CheckerManager.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
#include "clang/Basic/Builtins.h"
using namespace clang;
@@ -20,22 +22,17 @@ using namespace ento;
namespace {
-class OSAtomicChecker : public Checker {
+class OSAtomicChecker : public CheckerV2<eval::Call> {
public:
- static void *getTag() { static int tag = 0; return &tag; }
- virtual bool evalCallExpr(CheckerContext &C, const CallExpr *CE);
+ bool evalCall(const CallExpr *CE, CheckerContext &C) const;
private:
- bool evalOSAtomicCompareAndSwap(CheckerContext &C, const CallExpr *CE);
+ static bool evalOSAtomicCompareAndSwap(CheckerContext &C, const CallExpr *CE);
};
}
-void ento::RegisterOSAtomicChecker(ExprEngine &Eng) {
- Eng.registerCheck(new OSAtomicChecker());
-}
-
-bool OSAtomicChecker::evalCallExpr(CheckerContext &C,const CallExpr *CE) {
+bool OSAtomicChecker::evalCall(const CallExpr *CE, CheckerContext &C) const {
const GRState *state = C.getState();
const Expr *Callee = CE->getCallee();
SVal L = state->getSVal(Callee);
@@ -201,3 +198,7 @@ bool OSAtomicChecker::evalOSAtomicCompareAndSwap(CheckerContext &C,
return true;
}
+
+void ento::registerOSAtomicChecker(CheckerManager &mgr) {
+ mgr.registerChecker<OSAtomicChecker>();
+}
OpenPOWER on IntegriCloud