1 //===--- Checkers.td - Static Analyzer Checkers -===-----------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 include "clang/StaticAnalyzer/Checkers/CheckerBase.td"
12 //===----------------------------------------------------------------------===//
14 //===----------------------------------------------------------------------===//
16 def Core : Package<"core">;
17 def Cocoa : Package<"cocoa">;
18 def Unix : Package<"unix">;
19 def MacOSX : Package<"macosx">;
21 def CoreExperimental : Package<"experimental">,
22 InPackage<Core>, Hidden;
24 def CocoaExperimental : Package<"experimental">,
25 InPackage<Cocoa>, Hidden;
27 def UnixExperimental : Package<"experimental">,
28 InPackage<Unix>, Hidden;
30 def LLVM : Package<"llvm">;
31 def Debug : Package<"debug">;
33 //===----------------------------------------------------------------------===//
35 //===----------------------------------------------------------------------===//
37 def AllExperimental : CheckerGroup<"all-experimental">,
40 //===----------------------------------------------------------------------===//
42 //===----------------------------------------------------------------------===//
44 let ParentPackage = Cocoa in {
46 def ObjCSelfInitChecker : Checker<"SelfInit">,
47 HelpText<"Check that 'self' is propely initialized inside an initializer method">,
48 DescFile<"ObjCSelfInitChecker.cpp">;
50 def ObjCAtSyncChecker : Checker<"AtSync">,
51 HelpText<"Check for null pointers used as mutexes for @synchronized">,
52 DescFile<"ObjCAtSyncChecker.cpp">;
54 def NilArgChecker : Checker<"NilArg">,
55 HelpText<"Check for prohibited nil arguments to ObjC method calls">,
56 DescFile<"BasicObjCFoundationChecks.cpp">;
58 def ClassReleaseChecker : Checker<"ClassRelease">,
59 HelpText<"Check for sending 'retain', 'release', or 'autorelease' directly to a Class">,
60 DescFile<"BasicObjCFoundationChecks.cpp">;
62 def NSAutoreleasePoolChecker : Checker<"NSAutoreleasePool">,
63 HelpText<"Warn for subpar uses of NSAutoreleasePool">,
64 DescFile<"NSAutoreleasePoolChecker.cpp">;
66 def ObjCMethSigsChecker : Checker<"MethodSigs">,
67 HelpText<"Warn about Objective-C method signatures with type incompatibilities">,
68 DescFile<"CheckObjCInstMethSignature.cpp">;
70 def ObjCUnusedIvarsChecker : Checker<"UnusedIvars">,
71 HelpText<"Warn about private ivars that are never used">,
72 DescFile<"ObjCUnusedIVarsChecker.cpp">;
76 def StackAddrLeakChecker : Checker<"StackAddrLeak">,
78 HelpText<"Check that addresses to stack memory are not leaked outside the function">,
79 DescFile<"StackAddrLeakChecker.cpp">;
81 def DeadStoresChecker : Checker<"DeadStores">,
83 HelpText<"Check for stores to dead variables">,
84 DescFile<"DeadStoresChecker.cpp">;
86 def UnixAPIChecker : Checker<"API">,
88 HelpText<"Check calls to various UNIX/Posix functions">,
89 DescFile<"UnixAPIChecker.cpp">;
91 def MacOSXAPIChecker : Checker<"API">,
93 HelpText<"Check calls to various MacOSXAPIChecker">,
94 DescFile<"MacOSXAPIChecker.cpp">;
96 def CFNumberCreateChecker : Checker<"CFNumber">,
98 HelpText<"Check for CFNumberCreate">,
99 DescFile<"BasicObjCFoundationChecks.cpp">;
101 def CFRetainReleaseChecker : Checker<"CFRetainRelease">,
103 HelpText<"Check for null arguments to CFRetain/CFRelease">,
104 DescFile<"BasicObjCFoundationChecks.cpp">;
106 def LLVMConventionsChecker : Checker<"Conventions">,
108 HelpText<"Check code for LLVM codebase conventions">,
109 DescFile<"LLVMConventionsChecker.cpp">;
111 def LiveVariablesDumper : Checker<"DumpLiveVars">,
113 HelpText<"Print results of live variable analysis">,
114 DescFile<"DebugCheckers.cpp">;
116 def CFGViewer : Checker<"ViewCFG">,
118 HelpText<"View Control-Flow Graphs using GraphViz">,
119 DescFile<"DebugCheckers.cpp">;
121 def CFGDumper : Checker<"DumpCFG">,
123 HelpText<"Display Control-Flow Graphs">,
124 DescFile<"DebugCheckers.cpp">;
126 //===----------------------------------------------------------------------===//
127 // Hidden experimental checkers.
128 //===----------------------------------------------------------------------===//
130 let Group = AllExperimental in {
132 def CStringChecker : Checker<"CString">,
133 InPackage<CoreExperimental>,
134 HelpText<"Check calls to functions in <string.h>">,
135 DescFile<"CStringChecker.cpp">;
137 def UnreachableCodeChecker : Checker<"UnreachableCode">,
138 InPackage<CoreExperimental>,
139 HelpText<"Check unreachable code">,
140 DescFile<"UnreachableCodeChecker.cpp">;
142 def IdempotentOperationChecker : Checker<"IdempotentOps">,
143 InPackage<CoreExperimental>,
144 HelpText<"Warn about idempotent operations">,
145 DescFile<"IdempotentOperationChecker.cpp">;
147 def CastToStructChecker : Checker<"CastToStruct">,
148 InPackage<CoreExperimental>,
149 HelpText<"Check for cast from non-struct pointer to struct pointer">,
150 DescFile<"CastToStructChecker.cpp">;
152 def FixedAddressChecker : Checker<"FixedAddr">,
153 InPackage<CoreExperimental>,
154 HelpText<"Check for assignment of a fixed address to a pointer">,
155 DescFile<"FixedAddressChecker.cpp">;
157 def PointerArithChecker : Checker<"PointerArithm">,
158 InPackage<CoreExperimental>,
159 HelpText<"Check for pointer arithmetic on locations other than array elements">,
160 DescFile<"PointerArithChecker">;
162 def PointerSubChecker : Checker<"PointerSub">,
163 InPackage<CoreExperimental>,
164 HelpText<"Check for pointer subtractions on two pointers pointing to different memory chunks">,
165 DescFile<"PointerSubChecker">;
167 def SizeofPointerChecker : Checker<"SizeofPtr">,
168 InPackage<CoreExperimental>,
169 HelpText<"Warn about unintended use of sizeof() on pointer expressions">,
170 DescFile<"CheckSizeofPointer.cpp">;
172 def SecuritySyntaxChecker : Checker<"SecuritySyntactic">,
173 InPackage<CoreExperimental>,
174 HelpText<"Perform quick security checks that require no data flow">,
175 DescFile<"CheckSecuritySyntaxOnly.cpp">;
177 def ObjCDeallocChecker : Checker<"Dealloc">,
178 InPackage<CocoaExperimental>,
179 HelpText<"Warn about Objective-C classes that lack a correct implementation of -dealloc">,
180 DescFile<"CheckObjCDealloc.cpp">;
182 def ChrootChecker : Checker<"Chroot">,
183 InPackage<UnixExperimental>,
184 HelpText<"Check improper use of chroot">,
185 DescFile<"ChrootChecker.cpp">;
187 def PthreadLockChecker : Checker<"PthreadLock">,
188 InPackage<UnixExperimental>,
189 HelpText<"Simple lock -> unlock checker">,
190 DescFile<"PthreadLockChecker.cpp">;
192 def StreamChecker : Checker<"Stream">,
193 InPackage<UnixExperimental>,
194 HelpText<"Check stream handling functions">,
195 DescFile<"StreamChecker.cpp">;