diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-02-15 07:42:33 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-02-15 07:42:33 +0000 |
commit | 027a6abdd6cedc0b8203da72eed6d15c796dce9d (patch) | |
tree | 4a5ce981559aa8df3f86d9690421d4a1eb880529 /lib/StaticAnalyzer | |
parent | b25b295fdfc443bdf060e860a21f6f01d9fbdc18 (diff) |
[analyzer] Use the new registration mechanism on some of the internal checks. These are:
StackAddrLeakChecker
ObjCAtSyncChecker
UnixAPIChecker
MacOSXAPIChecker
The rest have/create implicit dependencies between checkers and need to be handled differently.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125559 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/StaticAnalyzer')
-rw-r--r-- | lib/StaticAnalyzer/Checkers/Checkers.td | 31 | ||||
-rw-r--r-- | lib/StaticAnalyzer/Checkers/ClangSACheckers.h | 2 | ||||
-rw-r--r-- | lib/StaticAnalyzer/Checkers/ExprEngine.cpp | 7 | ||||
-rw-r--r-- | lib/StaticAnalyzer/Checkers/InternalChecks.h | 5 | ||||
-rw-r--r-- | lib/StaticAnalyzer/Checkers/MacOSXAPIChecker.cpp | 7 | ||||
-rw-r--r-- | lib/StaticAnalyzer/Checkers/ObjCAtSyncChecker.cpp | 4 | ||||
-rw-r--r-- | lib/StaticAnalyzer/Checkers/ObjCSelfInitChecker.cpp | 2 | ||||
-rw-r--r-- | lib/StaticAnalyzer/Checkers/StackAddrLeakChecker.cpp | 4 | ||||
-rw-r--r-- | lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp | 4 | ||||
-rw-r--r-- | lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp | 1 |
10 files changed, 44 insertions, 23 deletions
diff --git a/lib/StaticAnalyzer/Checkers/Checkers.td b/lib/StaticAnalyzer/Checkers/Checkers.td index 2a2f3eed0c..21018af828 100644 --- a/lib/StaticAnalyzer/Checkers/Checkers.td +++ b/lib/StaticAnalyzer/Checkers/Checkers.td @@ -9,10 +9,39 @@ include "clang/StaticAnalyzer/Checkers/CheckerBase.td" +def Core : Package<"core">; def Cocoa : Package<"cocoa">; +def Unix : Package<"unix">; +def MacOSX : Package<"macosx">; + +let ParentPackage = Cocoa in { def : Checker<"ObjCSelfInitChecker">, - InPackage<Cocoa>, Named<"SelfInit">, HelpText<"Check that 'self' is propely initialized inside an initializer method">, DescFile<"ObjCSelfInitChecker.cpp">; + +def : Checker<"ObjCAtSyncChecker">, + Named<"AtSync">, + HelpText<"Check for null pointers used as mutexes for @synchronized">, + DescFile<"ObjCAtSyncChecker.cpp">; + +} + +def : Checker<"StackAddrLeakChecker">, + InPackage<Core>, + Named<"StackAddrLeak">, + HelpText<"Check that addresses to stack memory are not leaked outside the function">, + DescFile<"StackAddrLeakChecker.cpp">; + +def : Checker<"UnixAPIChecker">, + InPackage<Unix>, + Named<"API">, + HelpText<"Check calls to various UNIX/Posix functions">, + DescFile<"UnixAPIChecker.cpp">; + +def : Checker<"MacOSXAPIChecker">, + InPackage<MacOSX>, + Named<"API">, + HelpText<"Check calls to various MacOSXAPIChecker">, + DescFile<"MacOSXAPIChecker.cpp">; diff --git a/lib/StaticAnalyzer/Checkers/ClangSACheckers.h b/lib/StaticAnalyzer/Checkers/ClangSACheckers.h index b01b0f4c54..51cad5bc83 100644 --- a/lib/StaticAnalyzer/Checkers/ClangSACheckers.h +++ b/lib/StaticAnalyzer/Checkers/ClangSACheckers.h @@ -23,7 +23,7 @@ class ExprEngine; #define GET_CHECKERS #define CHECKER(FULLNAME,CLASS,CXXFILE,HELPTEXT,HIDDEN) \ void register##CLASS(ExprEngine &Eng); -#include "Checkers.inc" +#include "../Checkers/Checkers.inc" #undef CHECKER #undef GET_CHECKERS diff --git a/lib/StaticAnalyzer/Checkers/ExprEngine.cpp b/lib/StaticAnalyzer/Checkers/ExprEngine.cpp index 26523d368b..bde7c4395a 100644 --- a/lib/StaticAnalyzer/Checkers/ExprEngine.cpp +++ b/lib/StaticAnalyzer/Checkers/ExprEngine.cpp @@ -308,15 +308,11 @@ static void RegisterInternalChecks(ExprEngine &Eng) { RegisterUndefBranchChecker(Eng); RegisterUndefCapturedBlockVarChecker(Eng); RegisterUndefResultChecker(Eng); - RegisterStackAddrLeakChecker(Eng); - RegisterObjCAtSyncChecker(Eng); // This is not a checker yet. RegisterNoReturnFunctionChecker(Eng); RegisterBuiltinFunctionChecker(Eng); RegisterOSAtomicChecker(Eng); - RegisterUnixAPIChecker(Eng); - RegisterMacOSXAPIChecker(Eng); } ExprEngine::ExprEngine(AnalysisManager &mgr, TransferFuncs *tf) @@ -333,13 +329,14 @@ ExprEngine::ExprEngine(AnalysisManager &mgr, TransferFuncs *tf) NSExceptionII(NULL), NSExceptionInstanceRaiseSelectors(NULL), RaiseSel(GetNullarySelector("raise", getContext())), BR(mgr, *this), TF(tf) { - mgr.getCheckerManager()->registerCheckersToEngine(*this); // Register internal checks. RegisterInternalChecks(*this); // FIXME: Eventually remove the TF object entirely. TF->RegisterChecks(*this); TF->RegisterPrinters(getStateManager().Printers); + + mgr.getCheckerManager()->registerCheckersToEngine(*this); if (mgr.shouldEagerlyTrimExplodedGraph()) { // Enable eager node reclaimation when constructing the ExplodedGraph. diff --git a/lib/StaticAnalyzer/Checkers/InternalChecks.h b/lib/StaticAnalyzer/Checkers/InternalChecks.h index 4965fefd90..4eccf66000 100644 --- a/lib/StaticAnalyzer/Checkers/InternalChecks.h +++ b/lib/StaticAnalyzer/Checkers/InternalChecks.h @@ -34,24 +34,19 @@ void RegisterDereferenceChecker(ExprEngine &Eng); void RegisterDivZeroChecker(ExprEngine &Eng); void RegisterFixedAddressChecker(ExprEngine &Eng); void RegisterNoReturnFunctionChecker(ExprEngine &Eng); -void RegisterObjCAtSyncChecker(ExprEngine &Eng); void RegisterPointerArithChecker(ExprEngine &Eng); void RegisterPointerSubChecker(ExprEngine &Eng); void RegisterReturnPointerRangeChecker(ExprEngine &Eng); void RegisterReturnUndefChecker(ExprEngine &Eng); -void RegisterStackAddrLeakChecker(ExprEngine &Eng); void RegisterUndefBranchChecker(ExprEngine &Eng); void RegisterUndefCapturedBlockVarChecker(ExprEngine &Eng); void RegisterUndefResultChecker(ExprEngine &Eng); void RegisterUndefinedArraySubscriptChecker(ExprEngine &Eng); void RegisterUndefinedAssignmentChecker(ExprEngine &Eng); void RegisterVLASizeChecker(ExprEngine &Eng); -void registerObjCSelfInitChecker(ExprEngine &Eng); // API checks. -void RegisterMacOSXAPIChecker(ExprEngine &Eng); void RegisterOSAtomicChecker(ExprEngine &Eng); -void RegisterUnixAPIChecker(ExprEngine &Eng); } // end GR namespace diff --git a/lib/StaticAnalyzer/Checkers/MacOSXAPIChecker.cpp b/lib/StaticAnalyzer/Checkers/MacOSXAPIChecker.cpp index a5cab4ed0d..3cefded877 100644 --- a/lib/StaticAnalyzer/Checkers/MacOSXAPIChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/MacOSXAPIChecker.cpp @@ -15,7 +15,7 @@ // //===----------------------------------------------------------------------===// -#include "InternalChecks.h" +#include "ClangSACheckers.h" #include "clang/Basic/TargetInfo.h" #include "clang/StaticAnalyzer/Core/BugReporter/BugType.h" #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerVisitor.h" @@ -45,9 +45,8 @@ public: }; } //end anonymous namespace -void ento::RegisterMacOSXAPIChecker(ExprEngine &Eng) { - if (Eng.getContext().Target.getTriple().getVendor() == llvm::Triple::Apple) - Eng.registerCheck(new MacOSXAPIChecker()); +void ento::registerMacOSXAPIChecker(ExprEngine &Eng) { + Eng.registerCheck(new MacOSXAPIChecker()); } //===----------------------------------------------------------------------===// diff --git a/lib/StaticAnalyzer/Checkers/ObjCAtSyncChecker.cpp b/lib/StaticAnalyzer/Checkers/ObjCAtSyncChecker.cpp index 62dfaa2674..8285ef4c31 100644 --- a/lib/StaticAnalyzer/Checkers/ObjCAtSyncChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/ObjCAtSyncChecker.cpp @@ -12,7 +12,7 @@ // //===----------------------------------------------------------------------===// -#include "InternalChecks.h" +#include "ClangSACheckers.h" #include "clang/StaticAnalyzer/Core/BugReporter/BugType.h" #include "clang/StaticAnalyzer/Checkers/DereferenceChecker.h" #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerVisitor.h" @@ -33,7 +33,7 @@ public: }; } // end anonymous namespace -void ento::RegisterObjCAtSyncChecker(ExprEngine &Eng) { +void ento::registerObjCAtSyncChecker(ExprEngine &Eng) { // @synchronized is an Objective-C 2 feature. if (Eng.getContext().getLangOptions().ObjC2) Eng.registerCheck(new ObjCAtSyncChecker()); diff --git a/lib/StaticAnalyzer/Checkers/ObjCSelfInitChecker.cpp b/lib/StaticAnalyzer/Checkers/ObjCSelfInitChecker.cpp index 9737683656..f3810e04ff 100644 --- a/lib/StaticAnalyzer/Checkers/ObjCSelfInitChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/ObjCSelfInitChecker.cpp @@ -46,7 +46,7 @@ // objects in the diagnostics. // http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocAllocInit.html -#include "InternalChecks.h" +#include "ClangSACheckers.h" #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerVisitor.h" #include "clang/StaticAnalyzer/Core/PathSensitive/GRStateTrait.h" #include "clang/StaticAnalyzer/Core/BugReporter/BugType.h" diff --git a/lib/StaticAnalyzer/Checkers/StackAddrLeakChecker.cpp b/lib/StaticAnalyzer/Checkers/StackAddrLeakChecker.cpp index 3dda7251e8..7d5da0d0fe 100644 --- a/lib/StaticAnalyzer/Checkers/StackAddrLeakChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/StackAddrLeakChecker.cpp @@ -12,7 +12,7 @@ // //===----------------------------------------------------------------------===// -#include "InternalChecks.h" +#include "ClangSACheckers.h" #include "clang/StaticAnalyzer/Core/BugReporter/BugType.h" #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerVisitor.h" #include "clang/StaticAnalyzer/Core/PathSensitive/GRState.h" @@ -41,7 +41,7 @@ private: }; } -void ento::RegisterStackAddrLeakChecker(ExprEngine &Eng) { +void ento::registerStackAddrLeakChecker(ExprEngine &Eng) { Eng.registerCheck(new StackAddrLeakChecker()); } diff --git a/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp b/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp index b0fb71fee0..d7108d432c 100644 --- a/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp @@ -12,7 +12,7 @@ // //===----------------------------------------------------------------------===// -#include "InternalChecks.h" +#include "ClangSACheckers.h" #include "clang/Basic/TargetInfo.h" #include "clang/StaticAnalyzer/Core/BugReporter/BugType.h" #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerVisitor.h" @@ -46,7 +46,7 @@ public: }; } //end anonymous namespace -void ento::RegisterUnixAPIChecker(ExprEngine &Eng) { +void ento::registerUnixAPIChecker(ExprEngine &Eng) { Eng.registerCheck(new UnixAPIChecker()); } diff --git a/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp b/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp index 38a1966c71..6c8f55f308 100644 --- a/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp +++ b/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp @@ -30,6 +30,7 @@ #include "clang/StaticAnalyzer/Core/PathDiagnosticClients.h" // FIXME: Restructure checker registration. +#include "../Checkers/ClangSACheckers.h" #include "../Checkers/ExperimentalChecks.h" #include "../Checkers/InternalChecks.h" |