diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-02-15 21:25:03 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-02-15 21:25:03 +0000 |
commit | a0decc9a2481f938e1675b4f7bbd58761a882a36 (patch) | |
tree | f968a987d1e655cceee333ff6920283f49cb6e87 | |
parent | adafdbae908a8e798fa4940ed89f61597b3d7ca5 (diff) |
[analyzer] Use the new registration mechanism on some of the experimental checks. These are:
CStringChecker
ChrootChecker
MallocChecker
PthreadLockChecker
StreamChecker
UnreachableCodeChecker
MallocChecker creates implicit dependencies between checkers and needs to be handled differently.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125598 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/StaticAnalyzer/Checkers/CStringChecker.cpp | 4 | ||||
-rw-r--r-- | lib/StaticAnalyzer/Checkers/Checkers.td | 54 | ||||
-rw-r--r-- | lib/StaticAnalyzer/Checkers/ChrootChecker.cpp | 4 | ||||
-rw-r--r-- | lib/StaticAnalyzer/Checkers/ExperimentalChecks.cpp | 7 | ||||
-rw-r--r-- | lib/StaticAnalyzer/Checkers/ExperimentalChecks.h | 5 | ||||
-rw-r--r-- | lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp | 4 | ||||
-rw-r--r-- | lib/StaticAnalyzer/Checkers/StreamChecker.cpp | 4 | ||||
-rw-r--r-- | lib/StaticAnalyzer/Checkers/UnreachableCodeChecker.cpp | 4 | ||||
-rw-r--r-- | test/Analysis/additive-folding.c | 4 | ||||
-rw-r--r-- | test/Analysis/array-struct-region.c | 4 | ||||
-rw-r--r-- | test/Analysis/bstring.c | 8 | ||||
-rw-r--r-- | test/Analysis/chroot.c | 2 | ||||
-rw-r--r-- | test/Analysis/constant-folding.c | 2 | ||||
-rw-r--r-- | test/Analysis/malloc.c | 2 | ||||
-rw-r--r-- | test/Analysis/stream.c | 2 | ||||
-rw-r--r-- | test/Analysis/string.c | 8 | ||||
-rw-r--r-- | test/Analysis/unreachable-code-path.c | 2 |
17 files changed, 82 insertions, 38 deletions
diff --git a/lib/StaticAnalyzer/Checkers/CStringChecker.cpp b/lib/StaticAnalyzer/Checkers/CStringChecker.cpp index 51e6650908..1fa4d57894 100644 --- a/lib/StaticAnalyzer/Checkers/CStringChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/CStringChecker.cpp @@ -12,7 +12,7 @@ // //===----------------------------------------------------------------------===// -#include "ExperimentalChecks.h" +#include "ClangSACheckers.h" #include "clang/StaticAnalyzer/Core/BugReporter/BugType.h" #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerVisitor.h" #include "clang/StaticAnalyzer/Core/PathSensitive/GRStateTrait.h" @@ -109,7 +109,7 @@ namespace ento { } } -void ento::RegisterCStringChecker(ExprEngine &Eng) { +void ento::registerCStringChecker(ExprEngine &Eng) { Eng.registerCheck(new CStringChecker()); } diff --git a/lib/StaticAnalyzer/Checkers/Checkers.td b/lib/StaticAnalyzer/Checkers/Checkers.td index b8e69ddd65..020cef1fbf 100644 --- a/lib/StaticAnalyzer/Checkers/Checkers.td +++ b/lib/StaticAnalyzer/Checkers/Checkers.td @@ -9,11 +9,32 @@ include "clang/StaticAnalyzer/Checkers/CheckerBase.td" +//===----------------------------------------------------------------------===// +// Packages. +//===----------------------------------------------------------------------===// + def Core : Package<"core">; def Cocoa : Package<"cocoa">; def Unix : Package<"unix">; def MacOSX : Package<"macosx">; +def CoreExperimental : Package<"experimental">, + InPackage<Core>, Hidden; + +def UnixExperimental : Package<"experimental">, + InPackage<Unix>, Hidden; + +//===----------------------------------------------------------------------===// +// Groups. +//===----------------------------------------------------------------------===// + +def AllExperimental : CheckerGroup<"all-experimental">, + Hidden; + +//===----------------------------------------------------------------------===// +// Checkers. +//===----------------------------------------------------------------------===// + let ParentPackage = Cocoa in { def ObjCSelfInitChecker : Checker<"SelfInit">, @@ -40,3 +61,36 @@ def MacOSXAPIChecker : Checker<"API">, InPackage<MacOSX>, HelpText<"Check calls to various MacOSXAPIChecker">, DescFile<"MacOSXAPIChecker.cpp">; + +//===----------------------------------------------------------------------===// +// Hidden experimental checkers. +//===----------------------------------------------------------------------===// + +let Group = AllExperimental in { + +def CStringChecker : Checker<"CString">, + InPackage<CoreExperimental>, + HelpText<"Check calls to functions in <string.h>">, + DescFile<"CStringChecker.cpp">; + +def UnreachableCodeChecker : Checker<"UnreachableCode">, + InPackage<CoreExperimental>, + HelpText<"Check unreachable code">, + DescFile<"UnreachableCodeChecker.cpp">; + +def ChrootChecker : Checker<"Chroot">, + InPackage<UnixExperimental>, + HelpText<"Check improper use of chroot">, + DescFile<"ChrootChecker.cpp">; + +def PthreadLockChecker : Checker<"PthreadLock">, + InPackage<UnixExperimental>, + HelpText<"Simple lock -> unlock checker">, + DescFile<"PthreadLockChecker.cpp">; + +def StreamChecker : Checker<"Stream">, + InPackage<UnixExperimental>, + HelpText<"Check stream handling functions">, + DescFile<"StreamChecker.cpp">; + +} diff --git a/lib/StaticAnalyzer/Checkers/ChrootChecker.cpp b/lib/StaticAnalyzer/Checkers/ChrootChecker.cpp index c0c990ae09..a184dd4622 100644 --- a/lib/StaticAnalyzer/Checkers/ChrootChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/ChrootChecker.cpp @@ -11,7 +11,7 @@ // //===----------------------------------------------------------------------===// -#include "ExperimentalChecks.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" @@ -59,7 +59,7 @@ private: } // end anonymous namespace -void ento::RegisterChrootChecker(ExprEngine &Eng) { +void ento::registerChrootChecker(ExprEngine &Eng) { Eng.registerCheck(new ChrootChecker()); } diff --git a/lib/StaticAnalyzer/Checkers/ExperimentalChecks.cpp b/lib/StaticAnalyzer/Checkers/ExperimentalChecks.cpp index 606fb359fe..28a045d2fc 100644 --- a/lib/StaticAnalyzer/Checkers/ExperimentalChecks.cpp +++ b/lib/StaticAnalyzer/Checkers/ExperimentalChecks.cpp @@ -22,12 +22,7 @@ using namespace ento; void ento::RegisterExperimentalChecks(ExprEngine &Eng) { // These are checks that never belong as internal checks // within ExprEngine. - RegisterCStringChecker(Eng); - RegisterChrootChecker(Eng); - RegisterMallocChecker(Eng); - RegisterPthreadLockChecker(Eng); - RegisterStreamChecker(Eng); - RegisterUnreachableCodeChecker(Eng); + RegisterMallocChecker(Eng); // ArrayBoundChecker depends on this. } void ento::RegisterExperimentalInternalChecks(ExprEngine &Eng) { diff --git a/lib/StaticAnalyzer/Checkers/ExperimentalChecks.h b/lib/StaticAnalyzer/Checkers/ExperimentalChecks.h index 739d34d833..aa87705105 100644 --- a/lib/StaticAnalyzer/Checkers/ExperimentalChecks.h +++ b/lib/StaticAnalyzer/Checkers/ExperimentalChecks.h @@ -22,13 +22,8 @@ namespace ento { class ExprEngine; void RegisterAnalyzerStatsChecker(ExprEngine &Eng); -void RegisterChrootChecker(ExprEngine &Eng); -void RegisterCStringChecker(ExprEngine &Eng); void RegisterIdempotentOperationChecker(ExprEngine &Eng); void RegisterMallocChecker(ExprEngine &Eng); -void RegisterPthreadLockChecker(ExprEngine &Eng); -void RegisterStreamChecker(ExprEngine &Eng); -void RegisterUnreachableCodeChecker(ExprEngine &Eng); } // end GR namespace diff --git a/lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp b/lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp index 1f8cd892c2..e20230a885 100644 --- a/lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/PthreadLockChecker.cpp @@ -12,10 +12,10 @@ // //===----------------------------------------------------------------------===// +#include "ClangSACheckers.h" #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerVisitor.h" #include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h" #include "clang/StaticAnalyzer/Core/PathSensitive/GRStateTrait.h" -#include "ExperimentalChecks.h" #include "llvm/ADT/ImmutableSet.h" using namespace clang; @@ -53,7 +53,7 @@ template <> struct GRStateTrait<LockSet> : } // end GR namespace } // end clang namespace -void ento::RegisterPthreadLockChecker(ExprEngine &Eng) { +void ento::registerPthreadLockChecker(ExprEngine &Eng) { Eng.registerCheck(new PthreadLockChecker()); } diff --git a/lib/StaticAnalyzer/Checkers/StreamChecker.cpp b/lib/StaticAnalyzer/Checkers/StreamChecker.cpp index ba9fed8fe2..54792f74bd 100644 --- a/lib/StaticAnalyzer/Checkers/StreamChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/StreamChecker.cpp @@ -11,7 +11,7 @@ // //===----------------------------------------------------------------------===// -#include "ExperimentalChecks.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" @@ -114,7 +114,7 @@ namespace ento { } } -void ento::RegisterStreamChecker(ExprEngine &Eng) { +void ento::registerStreamChecker(ExprEngine &Eng) { Eng.registerCheck(new StreamChecker()); } diff --git a/lib/StaticAnalyzer/Checkers/UnreachableCodeChecker.cpp b/lib/StaticAnalyzer/Checkers/UnreachableCodeChecker.cpp index 1f23306d8c..6d72e6fb5e 100644 --- a/lib/StaticAnalyzer/Checkers/UnreachableCodeChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/UnreachableCodeChecker.cpp @@ -13,6 +13,7 @@ // A similar flow-sensitive only check exists in Analysis/ReachableCode.cpp //===----------------------------------------------------------------------===// +#include "ClangSACheckers.h" #include "clang/AST/ParentMap.h" #include "clang/Basic/Builtins.h" #include "clang/Basic/SourceManager.h" @@ -21,7 +22,6 @@ #include "clang/StaticAnalyzer/Core/PathSensitive/SVals.h" #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerHelpers.h" #include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h" -#include "ExperimentalChecks.h" #include "llvm/ADT/SmallPtrSet.h" // The number of CFGBlock pointers we want to reserve memory for. This is used @@ -54,7 +54,7 @@ void *UnreachableCodeChecker::getTag() { return &x; } -void ento::RegisterUnreachableCodeChecker(ExprEngine &Eng) { +void ento::registerUnreachableCodeChecker(ExprEngine &Eng) { Eng.registerCheck(new UnreachableCodeChecker()); } diff --git a/test/Analysis/additive-folding.c b/test/Analysis/additive-folding.c index 713f788ac0..096ffb9a50 100644 --- a/test/Analysis/additive-folding.c +++ b/test/Analysis/additive-folding.c @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-experimental-checks -verify -analyzer-constraints=basic %s -// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-experimental-checks -verify -analyzer-constraints=range %s +// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-experimental-checks -analyzer-checker=core.experimental.UnreachableCode -verify -analyzer-constraints=basic %s +// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-experimental-checks -analyzer-checker=core.experimental.UnreachableCode -verify -analyzer-constraints=range %s // These are used to trigger warnings. typedef typeof(sizeof(int)) size_t; diff --git a/test/Analysis/array-struct-region.c b/test/Analysis/array-struct-region.c index dabd25bb1f..8162200b0a 100644 --- a/test/Analysis/array-struct-region.c +++ b/test/Analysis/array-struct-region.c @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -analyze -analyzer-experimental-checks -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=region -analyzer-constraints=basic -verify %s -// RUN: %clang_cc1 -analyze -analyzer-experimental-checks -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=region -analyzer-constraints=range -verify %s +// RUN: %clang_cc1 -analyze -analyzer-experimental-checks -analyzer-experimental-internal-checks -analyzer-checker=core.experimental.UnreachableCode -analyzer-check-objc-mem -analyzer-store=region -analyzer-constraints=basic -verify %s +// RUN: %clang_cc1 -analyze -analyzer-experimental-checks -analyzer-experimental-internal-checks -analyzer-checker=core.experimental.UnreachableCode -analyzer-check-objc-mem -analyzer-store=region -analyzer-constraints=range -verify %s int string_literal_init() { char a[] = "abc"; diff --git a/test/Analysis/bstring.c b/test/Analysis/bstring.c index ffe420f725..eb235430aa 100644 --- a/test/Analysis/bstring.c +++ b/test/Analysis/bstring.c @@ -1,7 +1,7 @@ -// RUN: %clang_cc1 -analyze -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=region -analyzer-experimental-checks -verify %s -// RUN: %clang_cc1 -analyze -DUSE_BUILTINS -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=region -analyzer-experimental-checks -verify %s -// RUN: %clang_cc1 -analyze -DVARIANT -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=region -analyzer-experimental-checks -verify %s -// RUN: %clang_cc1 -analyze -DUSE_BUILTINS -DVARIANT -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=region -analyzer-experimental-checks -verify %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core.experimental.CString -analyzer-check-objc-mem -analyzer-store=region -analyzer-experimental-checks -verify %s +// RUN: %clang_cc1 -analyze -DUSE_BUILTINS -analyzer-checker=core.experimental.CString -analyzer-check-objc-mem -analyzer-store=region -analyzer-experimental-checks -verify %s +// RUN: %clang_cc1 -analyze -DVARIANT -analyzer-checker=core.experimental.CString -analyzer-check-objc-mem -analyzer-store=region -analyzer-experimental-checks -verify %s +// RUN: %clang_cc1 -analyze -DUSE_BUILTINS -DVARIANT -analyzer-checker=core.experimental.CString -analyzer-check-objc-mem -analyzer-store=region -analyzer-experimental-checks -verify %s //===----------------------------------------------------------------------=== // Declarations diff --git a/test/Analysis/chroot.c b/test/Analysis/chroot.c index a0ee450496..5b98a71974 100644 --- a/test/Analysis/chroot.c +++ b/test/Analysis/chroot.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-experimental-checks -analyzer-store region -verify %s +// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-checker=unix.experimental.Chroot -analyzer-store region -verify %s extern int chroot(const char* path); extern int chdir(const char* path); diff --git a/test/Analysis/constant-folding.c b/test/Analysis/constant-folding.c index 9191a9e057..bb339f6957 100644 --- a/test/Analysis/constant-folding.c +++ b/test/Analysis/constant-folding.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -analyze -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-experimental-checks -verify %s +// RUN: %clang_cc1 -analyze -analyzer-experimental-internal-checks -analyzer-checker=core.experimental.UnreachableCode -analyzer-check-objc-mem -analyzer-experimental-checks -verify %s // Trigger a warning if the analyzer reaches this point in the control flow. #define WARN ((void)*(char*)0) diff --git a/test/Analysis/malloc.c b/test/Analysis/malloc.c index e443150e1f..fdfccab204 100644 --- a/test/Analysis/malloc.c +++ b/test/Analysis/malloc.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -analyze -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-experimental-checks -analyzer-store=region -verify %s +// RUN: %clang_cc1 -analyze -analyzer-experimental-internal-checks -analyzer-checker=core.experimental.UnreachableCode -analyzer-check-objc-mem -analyzer-experimental-checks -analyzer-store=region -verify %s typedef __typeof(sizeof(int)) size_t; void *malloc(size_t); void free(void *); diff --git a/test/Analysis/stream.c b/test/Analysis/stream.c index 0b4960ffd9..7dfd49b39d 100644 --- a/test/Analysis/stream.c +++ b/test/Analysis/stream.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-experimental-checks -analyzer-store region -verify %s +// RUN: %clang_cc1 -analyze -analyzer-check-objc-mem -analyzer-checker=unix.experimental.Stream -analyzer-store region -verify %s typedef __typeof__(sizeof(int)) size_t; typedef struct _IO_FILE FILE; diff --git a/test/Analysis/string.c b/test/Analysis/string.c index 35ed7106f7..baf48930d7 100644 --- a/test/Analysis/string.c +++ b/test/Analysis/string.c @@ -1,7 +1,7 @@ -// RUN: %clang_cc1 -analyze -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=region -analyzer-experimental-checks -verify %s -// RUN: %clang_cc1 -analyze -DUSE_BUILTINS -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=region -analyzer-experimental-checks -verify %s -// RUN: %clang_cc1 -analyze -DVARIANT -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=region -analyzer-experimental-checks -verify %s -// RUN: %clang_cc1 -analyze -DUSE_BUILTINS -DVARIANT -analyzer-experimental-internal-checks -analyzer-check-objc-mem -analyzer-store=region -analyzer-experimental-checks -verify %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core.experimental.CString -analyzer-checker=core.experimental.UnreachableCode -analyzer-check-objc-mem -analyzer-store=region -verify %s +// RUN: %clang_cc1 -analyze -DUSE_BUILTINS -analyzer-checker=core.experimental.CString -analyzer-checker=core.experimental.UnreachableCode -analyzer-check-objc-mem -analyzer-store=region -verify %s +// RUN: %clang_cc1 -analyze -DVARIANT -analyzer-checker=core.experimental.CString -analyzer-checker=core.experimental.UnreachableCode -analyzer-check-objc-mem -analyzer-store=region -verify %s +// RUN: %clang_cc1 -analyze -DUSE_BUILTINS -DVARIANT -analyzer-checker=core.experimental.CString -analyzer-checker=core.experimental.UnreachableCode -analyzer-check-objc-mem -analyzer-store=region -verify %s //===----------------------------------------------------------------------=== // Declarations diff --git a/test/Analysis/unreachable-code-path.c b/test/Analysis/unreachable-code-path.c index 5e7a9872f9..9e560d55a4 100644 --- a/test/Analysis/unreachable-code-path.c +++ b/test/Analysis/unreachable-code-path.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -analyze -analyzer-experimental-checks -analyzer-check-objc-mem -analyzer-check-dead-stores -verify -analyzer-opt-analyze-nested-blocks -Wno-unused-value %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core.experimental.UnreachableCode -analyzer-check-objc-mem -analyzer-check-dead-stores -verify -analyzer-opt-analyze-nested-blocks -Wno-unused-value %s extern void foo(int a); |