diff options
| author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-02-28 01:27:02 +0000 |
|---|---|---|
| committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-02-28 01:27:02 +0000 |
| commit | b2cf708395328da8b00181fbc935b5326ca594ed (patch) | |
| tree | 35aab794aca5ffe9eff8f38e0e06cb0013688dfe /clang/lib/StaticAnalyzer | |
| parent | 0a9ce3ec8fd22e1a29af0621671f866154850dc7 (diff) | |
| download | bcm5719-llvm-b2cf708395328da8b00181fbc935b5326ca594ed.tar.gz bcm5719-llvm-b2cf708395328da8b00181fbc935b5326ca594ed.zip | |
[analyzer] Migrate OSAtomicChecker to CheckerV2.
llvm-svn: 126610
Diffstat (limited to 'clang/lib/StaticAnalyzer')
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>(); +} |

