diff options
Diffstat (limited to 'lib')
5 files changed, 38 insertions, 8 deletions
diff --git a/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp b/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp index 26e09e7ad3..66cd359785 100644 --- a/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp +++ b/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp @@ -15,6 +15,7 @@ #include "BasicObjCFoundationChecks.h" +#include "ClangSACheckers.h" #include "clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h" #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerVisitor.h" #include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h" @@ -485,12 +486,19 @@ void ClassReleaseChecker::preVisitObjCMessage(CheckerContext &C, //===----------------------------------------------------------------------===// // Check registration. //===----------------------------------------------------------------------===// - -void ento::RegisterAppleChecks(ExprEngine& Eng, const Decl &D) { + +void ento::registerNilArgChecker(ExprEngine& Eng) { Eng.registerCheck(new NilArgChecker()); +} + +void ento::registerCFNumberCreateChecker(ExprEngine& Eng) { Eng.registerCheck(new CFNumberCreateChecker()); - RegisterNSErrorChecks(Eng.getBugReporter(), Eng, D); - RegisterNSAutoreleasePoolChecks(Eng); +} + +void ento::registerCFRetainReleaseChecker(ExprEngine& Eng) { Eng.registerCheck(new CFRetainReleaseChecker()); +} + +void ento::registerClassReleaseChecker(ExprEngine& Eng) { Eng.registerCheck(new ClassReleaseChecker()); } diff --git a/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.h b/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.h index f4966e8ae8..92cfb1ae55 100644 --- a/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.h +++ b/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.h @@ -27,7 +27,6 @@ class BugReporter; class ExprEngine; void RegisterNSErrorChecks(BugReporter& BR, ExprEngine &Eng, const Decl &D); -void RegisterNSAutoreleasePoolChecks(ExprEngine &Eng); } // end GR namespace diff --git a/lib/StaticAnalyzer/Checkers/Checkers.td b/lib/StaticAnalyzer/Checkers/Checkers.td index 9c09e9325b..5d30894ebe 100644 --- a/lib/StaticAnalyzer/Checkers/Checkers.td +++ b/lib/StaticAnalyzer/Checkers/Checkers.td @@ -45,6 +45,18 @@ def ObjCAtSyncChecker : Checker<"AtSync">, HelpText<"Check for null pointers used as mutexes for @synchronized">, DescFile<"ObjCAtSyncChecker.cpp">; +def NilArgChecker : Checker<"NilArg">, + HelpText<"Check for prohibited nil arguments to ObjC method calls">, + DescFile<"BasicObjCFoundationChecks.cpp">; + +def ClassReleaseChecker : Checker<"ClassRelease">, + HelpText<"Check for sending 'retain', 'release', or 'autorelease' directly to a Class">, + DescFile<"BasicObjCFoundationChecks.cpp">; + +def NSAutoreleasePoolChecker : Checker<"NSAutoreleasePool">, + HelpText<"Warn for subpar uses of NSAutoreleasePool">, + DescFile<"NSAutoreleasePoolChecker.cpp">; + } def StackAddrLeakChecker : Checker<"StackAddrLeak">, @@ -62,6 +74,16 @@ def MacOSXAPIChecker : Checker<"API">, HelpText<"Check calls to various MacOSXAPIChecker">, DescFile<"MacOSXAPIChecker.cpp">; +def CFNumberCreateChecker : Checker<"CFNumber">, + InPackage<MacOSX>, + HelpText<"Check for CFNumberCreate">, + DescFile<"BasicObjCFoundationChecks.cpp">; + +def CFRetainReleaseChecker : Checker<"CFRetainRelease">, + InPackage<MacOSX>, + HelpText<"Check for null arguments to CFRetain/CFRelease">, + DescFile<"BasicObjCFoundationChecks.cpp">; + //===----------------------------------------------------------------------===// // Hidden experimental checkers. //===----------------------------------------------------------------------===// diff --git a/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp b/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp index 9b1ff16844..a32fe36e56 100644 --- a/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/NSAutoreleasePoolChecker.cpp @@ -15,10 +15,10 @@ // //===----------------------------------------------------------------------===// +#include "ClangSACheckers.h" #include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h" #include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h" #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerVisitor.h" -#include "BasicObjCFoundationChecks.h" #include "clang/AST/DeclObjC.h" #include "clang/AST/Decl.h" @@ -45,7 +45,7 @@ public: } // end anonymous namespace -void ento::RegisterNSAutoreleasePoolChecks(ExprEngine &Eng) { +void ento::registerNSAutoreleasePoolChecker(ExprEngine &Eng) { ASTContext &Ctx = Eng.getContext(); if (Ctx.getLangOptions().getGCMode() != LangOptions::NonGC) { Eng.registerCheck(new NSAutoreleasePoolChecker(GetNullarySelector("release", diff --git a/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp b/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp index 588809f7a3..9a35096657 100644 --- a/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp +++ b/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp @@ -34,6 +34,7 @@ #include "../Checkers/ClangSACheckers.h" #include "../Checkers/ExperimentalChecks.h" #include "../Checkers/InternalChecks.h" +#include "../Checkers/BasicObjCFoundationChecks.h" #include "clang/Basic/FileManager.h" #include "clang/Basic/SourceManager.h" @@ -349,7 +350,7 @@ static void ActionExprEngine(AnalysisConsumer &C, AnalysisManager& mgr, if (C.Opts.EnableExperimentalInternalChecks) RegisterExperimentalInternalChecks(Eng); - RegisterAppleChecks(Eng, *D); + RegisterNSErrorChecks(Eng.getBugReporter(), Eng, *D); if (C.Opts.EnableExperimentalChecks) RegisterExperimentalChecks(Eng); |