blob: c139476960c8905e4ab85aee26b54f5fb4c268c4 [file] [log] [blame]
Argyrios Kyrtzidis43dee222011-02-14 18:13:31 +00001//===--- Checkers.td - Static Analyzer Checkers -===-----------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10include "clang/StaticAnalyzer/Checkers/CheckerBase.td"
11
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +000012//===----------------------------------------------------------------------===//
13// Packages.
14//===----------------------------------------------------------------------===//
15
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000016def Core : Package<"core">;
Argyrios Kyrtzidis43dee222011-02-14 18:13:31 +000017def Cocoa : Package<"cocoa">;
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000018def Unix : Package<"unix">;
19def MacOSX : Package<"macosx">;
Ted Kremenekade31952011-03-12 06:14:28 +000020def DeadCode : Package<"deadcode">;
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000021
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +000022def CoreExperimental : Package<"experimental">,
23 InPackage<Core>, Hidden;
24
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +000025def CocoaExperimental : Package<"experimental">,
26 InPackage<Cocoa>, Hidden;
27
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +000028def UnixExperimental : Package<"experimental">,
29 InPackage<Unix>, Hidden;
30
Argyrios Kyrtzidis9fb94742011-02-17 21:39:24 +000031def LLVM : Package<"llvm">;
Argyrios Kyrtzidis2d67b902011-02-17 21:39:39 +000032def Debug : Package<"debug">;
Argyrios Kyrtzidis9fb94742011-02-17 21:39:24 +000033
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +000034//===----------------------------------------------------------------------===//
35// Groups.
36//===----------------------------------------------------------------------===//
37
38def AllExperimental : CheckerGroup<"all-experimental">,
39 Hidden;
40
41//===----------------------------------------------------------------------===//
42// Checkers.
43//===----------------------------------------------------------------------===//
44
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000045let ParentPackage = Cocoa in {
Argyrios Kyrtzidis43dee222011-02-14 18:13:31 +000046
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000047def ObjCSelfInitChecker : Checker<"SelfInit">,
Argyrios Kyrtzidis43dee222011-02-14 18:13:31 +000048 HelpText<"Check that 'self' is propely initialized inside an initializer method">,
49 DescFile<"ObjCSelfInitChecker.cpp">;
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000050
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000051def ObjCAtSyncChecker : Checker<"AtSync">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000052 HelpText<"Check for null pointers used as mutexes for @synchronized">,
53 DescFile<"ObjCAtSyncChecker.cpp">;
54
Argyrios Kyrtzidis0b1ba622011-02-16 01:40:52 +000055def NilArgChecker : Checker<"NilArg">,
56 HelpText<"Check for prohibited nil arguments to ObjC method calls">,
57 DescFile<"BasicObjCFoundationChecks.cpp">;
58
59def ClassReleaseChecker : Checker<"ClassRelease">,
60 HelpText<"Check for sending 'retain', 'release', or 'autorelease' directly to a Class">,
61 DescFile<"BasicObjCFoundationChecks.cpp">;
62
Anders Carlsson4597b7b2011-03-13 20:35:21 +000063def VariadicMethodTypeChecker : Checker<"VariadicMethodTypes">,
64 HelpText<"Check for passing non-Objective-C types to variadic methods that expect"
65 "only Objective-C types">,
66 DescFile<"BasicObjCFoundationChecks.cpp">;
67
Ted Kremenekb8d545c2011-02-25 22:19:14 +000068def NSAutoreleasePoolChecker : Checker<"NSAutoreleasePool">,
69 HelpText<"Warn for subpar uses of NSAutoreleasePool">,
Argyrios Kyrtzidis0b1ba622011-02-16 01:40:52 +000070 DescFile<"NSAutoreleasePoolChecker.cpp">;
71
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +000072def ObjCMethSigsChecker : Checker<"MethodSigs">,
73 HelpText<"Warn about Objective-C method signatures with type incompatibilities">,
74 DescFile<"CheckObjCInstMethSignature.cpp">;
75
76def ObjCUnusedIvarsChecker : Checker<"UnusedIvars">,
77 HelpText<"Warn about private ivars that are never used">,
78 DescFile<"ObjCUnusedIVarsChecker.cpp">;
Argyrios Kyrtzidisb3d74da2011-02-28 17:36:18 +000079
80def NSErrorChecker : Checker<"NSError">,
81 HelpText<"Check usage of NSError** parameters">,
82 DescFile<"NSErrorChecker.cpp">;
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +000083
Ted Kremenekf5d2ef42011-02-25 22:00:43 +000084} // end "cocoa"
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000085
Argyrios Kyrtzidis10348702011-02-28 01:27:07 +000086let ParentPackage = Core in {
87
Argyrios Kyrtzidisb3d74da2011-02-28 17:36:18 +000088def DereferenceChecker : Checker<"Deref">,
89 HelpText<"Check for null pointers at loads and stores">,
90 DescFile<"DereferenceChecker.cpp">;
91
Argyrios Kyrtzidisd84f4222011-02-28 01:28:13 +000092def CallAndMessageChecker : Checker<"CallAndMsg">,
93 HelpText<"Check for errors of call and objc message expressions">,
94 DescFile<"CallAndMessageChecker.cpp">;
95
Argyrios Kyrtzidis139ca962011-02-28 01:28:05 +000096def AdjustedReturnValueChecker : Checker<"AdjustRet">,
97 HelpText<"Check to see if the return value of a function call is different than the caller expects">,
98 DescFile<"AdjustedReturnValueChecker.cpp">;
99
Argyrios Kyrtzidisbd900762011-02-28 01:28:01 +0000100def AttrNonNullChecker : Checker<"AttrNonNull">,
101 HelpText<"Check for arguments declared to have nonnull attribute">,
102 DescFile<"AttrNonNullChecker.cpp">;
103
Argyrios Kyrtzidis3ce2b482011-02-28 01:27:54 +0000104def VLASizeChecker : Checker<"VLASize">,
105 HelpText<"Check for declarations of VLA of undefined or zero size">,
106 DescFile<"VLASizeChecker.cpp">;
107
Argyrios Kyrtzidis919c9b92011-02-28 01:27:50 +0000108def DivZeroChecker : Checker<"DivZero">,
109 HelpText<"Check for division by zeros">,
110 DescFile<"DivZeroChecker.cpp">;
111
Argyrios Kyrtzidis7f649d72011-02-28 01:27:46 +0000112def ReturnUndefChecker : Checker<"UndefReturn">,
113 HelpText<"Check for undefined or garbage values being returned to the caller">,
114 DescFile<"ReturnUndefChecker.cpp">;
115
Argyrios Kyrtzidiseb290ca2011-02-28 01:27:41 +0000116def UndefinedArraySubscriptChecker : Checker<"UndefArraySubscript">,
117 HelpText<"Check for undefined array subscripts">,
118 DescFile<"UndefinedArraySubscriptChecker.cpp">;
119
Argyrios Kyrtzidis267aa5c2011-02-28 01:27:37 +0000120def UndefinedAssignmentChecker : Checker<"UndefAssign">,
121 HelpText<"Check for assigning undefined values">,
122 DescFile<"UndefinedAssignmentChecker.cpp">;
123
Argyrios Kyrtzidiscc05d512011-02-28 01:27:33 +0000124def UndefBranchChecker : Checker<"UndefBranch">,
125 HelpText<"Check for undefined branch conditions">,
126 DescFile<"UndefBranchChecker.cpp">;
127
Argyrios Kyrtzidis265c6742011-02-28 01:27:26 +0000128def UndefCapturedBlockVarChecker : Checker<"UndefBlockVar">,
129 HelpText<"Check for blocks that capture uninitialized values">,
130 DescFile<"UndefCapturedBlockVarChecker.cpp">;
131
Argyrios Kyrtzidis180e03f2011-02-28 01:27:22 +0000132def UndefResultChecker : Checker<"UndefBinOpResult">,
133 HelpText<"Check for undefined results of non-assignment binary operators">,
134 DescFile<"UndefResultChecker.cpp">;
135
Argyrios Kyrtzidis3267d952011-02-28 01:27:17 +0000136def NoReturnFunctionChecker : Checker<"NoReturnFunc">,
137 HelpText<"Evaluate functions that do not return to the caller">,
138 DescFile<"NoReturnFunctionChecker.cpp">;
139
Argyrios Kyrtzidis10348702011-02-28 01:27:07 +0000140def BuiltinFunctionChecker : Checker<"BuiltinFunc">,
141 HelpText<"Evaluate clang builtin functions">,
142 DescFile<"BuiltinFunctionChecker.cpp">;
143
Ted Kremenekf5d2ef42011-02-25 22:00:43 +0000144def StackAddrEscapeChecker : Checker<"StackAddrEscape">,
Ted Kremenekf5d2ef42011-02-25 22:00:43 +0000145 HelpText<"Check that addresses to stack memory do not escape the function">,
146 DescFile<"StackAddrEscapeChecker.cpp">;
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +0000147
Argyrios Kyrtzidisa676d502011-02-28 01:27:12 +0000148} // end "core"
149
Ted Kremenekade31952011-03-12 06:14:28 +0000150let ParentPackage = DeadCode in {
151
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +0000152def DeadStoresChecker : Checker<"DeadStores">,
Ted Kremenekf5d2ef42011-02-25 22:00:43 +0000153 HelpText<"Check for values stored to a variables that are never read afterwards">,
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +0000154 DescFile<"DeadStoresChecker.cpp">;
155
Ted Kremenekade31952011-03-12 06:14:28 +0000156def IdempotentOperationChecker : Checker<"IdempotentOperations">,
157 HelpText<"Warn about idempotent operations">,
158 DescFile<"IdempotentOperationChecker.cpp">;
159
160} // end DeadCode
161
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +0000162def UnixAPIChecker : Checker<"API">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +0000163 InPackage<Unix>,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +0000164 HelpText<"Check calls to various UNIX/Posix functions">,
165 DescFile<"UnixAPIChecker.cpp">;
166
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +0000167def MacOSXAPIChecker : Checker<"API">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +0000168 InPackage<MacOSX>,
Ted Kremenekf5d2ef42011-02-25 22:00:43 +0000169 HelpText<"Check for proper uses of various Mac OS X APIs">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +0000170 DescFile<"MacOSXAPIChecker.cpp">;
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +0000171
Argyrios Kyrtzidisf0293662011-02-28 01:27:02 +0000172def OSAtomicChecker : Checker<"AtomicCAS">,
173 InPackage<MacOSX>,
174 HelpText<"Evaluate calls to OSAtomic functions">,
175 DescFile<"OSAtomicChecker.cpp">;
176
Argyrios Kyrtzidis0b1ba622011-02-16 01:40:52 +0000177def CFNumberCreateChecker : Checker<"CFNumber">,
178 InPackage<MacOSX>,
Ted Kremenekf5d2ef42011-02-25 22:00:43 +0000179 HelpText<"Check for proper uses of CFNumberCreate">,
Argyrios Kyrtzidis0b1ba622011-02-16 01:40:52 +0000180 DescFile<"BasicObjCFoundationChecks.cpp">;
181
182def CFRetainReleaseChecker : Checker<"CFRetainRelease">,
183 InPackage<MacOSX>,
184 HelpText<"Check for null arguments to CFRetain/CFRelease">,
185 DescFile<"BasicObjCFoundationChecks.cpp">;
186
Argyrios Kyrtzidisb3d74da2011-02-28 17:36:18 +0000187def CFErrorChecker : Checker<"CFError">,
188 InPackage<MacOSX>,
189 HelpText<"Check usage of CFErrorRef* parameters">,
190 DescFile<"NSErrorChecker.cpp">;
191
Argyrios Kyrtzidis9fb94742011-02-17 21:39:24 +0000192def LLVMConventionsChecker : Checker<"Conventions">,
193 InPackage<LLVM>,
194 HelpText<"Check code for LLVM codebase conventions">,
195 DescFile<"LLVMConventionsChecker.cpp">;
196
Argyrios Kyrtzidis2d67b902011-02-17 21:39:39 +0000197def LiveVariablesDumper : Checker<"DumpLiveVars">,
198 InPackage<Debug>,
199 HelpText<"Print results of live variable analysis">,
200 DescFile<"DebugCheckers.cpp">;
201
202def CFGViewer : Checker<"ViewCFG">,
203 InPackage<Debug>,
204 HelpText<"View Control-Flow Graphs using GraphViz">,
205 DescFile<"DebugCheckers.cpp">;
206
207def CFGDumper : Checker<"DumpCFG">,
208 InPackage<Debug>,
209 HelpText<"Display Control-Flow Graphs">,
210 DescFile<"DebugCheckers.cpp">;
211
Argyrios Kyrtzidis58f2e7c2011-02-28 01:26:50 +0000212def AnalyzerStatsChecker : Checker<"Stats">,
213 InPackage<Debug>,
214 HelpText<"Emit warnings with analyzer statistics">,
215 DescFile<"AnalyzerStatsChecker.cpp">;
216
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +0000217//===----------------------------------------------------------------------===//
218// Hidden experimental checkers.
219//===----------------------------------------------------------------------===//
220
221let Group = AllExperimental in {
222
Argyrios Kyrtzidis05357012011-02-28 01:26:57 +0000223def ArrayBoundCheckerV2 : Checker<"Overflow">,
224 InPackage<CoreExperimental>,
225 HelpText<"Warn about buffer overflows">,
226 DescFile<"ArrayBoundCheckerV2.cpp">,
227 Hidden; // Must be specified explicitly in order to run.
228
Argyrios Kyrtzidis312dbec2011-02-28 01:26:35 +0000229def MallocChecker : Checker<"Malloc">,
230 InPackage<CoreExperimental>,
231 HelpText<"Check for potential memory leaks, double free, and use-after-free problems">,
232 DescFile<"MallocChecker.cpp">;
233
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +0000234def CStringChecker : Checker<"CString">,
235 InPackage<CoreExperimental>,
236 HelpText<"Check calls to functions in <string.h>">,
237 DescFile<"CStringChecker.cpp">;
238
239def UnreachableCodeChecker : Checker<"UnreachableCode">,
240 InPackage<CoreExperimental>,
241 HelpText<"Check unreachable code">,
Argyrios Kyrtzidis08099ad2011-02-24 21:42:52 +0000242 DescFile<"UnreachableCodeChecker.cpp">,
243 Hidden; // Must be specified explicitly in order to run.
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +0000244
Argyrios Kyrtzidis23ade502011-02-15 22:55:20 +0000245def CastToStructChecker : Checker<"CastToStruct">,
246 InPackage<CoreExperimental>,
247 HelpText<"Check for cast from non-struct pointer to struct pointer">,
248 DescFile<"CastToStructChecker.cpp">;
249
250def FixedAddressChecker : Checker<"FixedAddr">,
251 InPackage<CoreExperimental>,
252 HelpText<"Check for assignment of a fixed address to a pointer">,
253 DescFile<"FixedAddressChecker.cpp">;
254
255def PointerArithChecker : Checker<"PointerArithm">,
256 InPackage<CoreExperimental>,
257 HelpText<"Check for pointer arithmetic on locations other than array elements">,
258 DescFile<"PointerArithChecker">;
259
260def PointerSubChecker : Checker<"PointerSub">,
261 InPackage<CoreExperimental>,
262 HelpText<"Check for pointer subtractions on two pointers pointing to different memory chunks">,
263 DescFile<"PointerSubChecker">;
264
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +0000265def SizeofPointerChecker : Checker<"SizeofPtr">,
266 InPackage<CoreExperimental>,
267 HelpText<"Warn about unintended use of sizeof() on pointer expressions">,
268 DescFile<"CheckSizeofPointer.cpp">;
269
270def SecuritySyntaxChecker : Checker<"SecuritySyntactic">,
271 InPackage<CoreExperimental>,
272 HelpText<"Perform quick security checks that require no data flow">,
273 DescFile<"CheckSecuritySyntaxOnly.cpp">;
274
Argyrios Kyrtzidis69355792011-02-24 08:41:57 +0000275def ReturnPointerRangeChecker : Checker<"ReturnPtrRange">,
276 InPackage<CoreExperimental>,
277 HelpText<"Check for an out-of-bound pointer being returned to callers">,
278 DescFile<"ReturnPointerRangeChecker.cpp">;
279
Argyrios Kyrtzidis8be5b3a2011-02-24 08:42:12 +0000280def ArrayBoundChecker : Checker<"ArrayBound">,
281 InPackage<CoreExperimental>,
282 HelpText<"Check for an out-of-bound pointer being returned to callers">,
283 DescFile<"ArrayBoundChecker.cpp">;
284
Argyrios Kyrtzidis0d6b0c02011-02-24 21:42:49 +0000285def CastSizeChecker : Checker<"CastSize">,
286 InPackage<CoreExperimental>,
287 HelpText<"Check when casting a malloc'ed type T, whether the size is a multiple of the size of T">,
288 DescFile<"CastSizeChecker.cpp">;
289
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +0000290def ObjCDeallocChecker : Checker<"Dealloc">,
291 InPackage<CocoaExperimental>,
292 HelpText<"Warn about Objective-C classes that lack a correct implementation of -dealloc">,
293 DescFile<"CheckObjCDealloc.cpp">;
294
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +0000295def ChrootChecker : Checker<"Chroot">,
296 InPackage<UnixExperimental>,
297 HelpText<"Check improper use of chroot">,
298 DescFile<"ChrootChecker.cpp">;
299
300def PthreadLockChecker : Checker<"PthreadLock">,
301 InPackage<UnixExperimental>,
302 HelpText<"Simple lock -> unlock checker">,
303 DescFile<"PthreadLockChecker.cpp">;
304
305def StreamChecker : Checker<"Stream">,
306 InPackage<UnixExperimental>,
307 HelpText<"Check stream handling functions">,
308 DescFile<"StreamChecker.cpp">;
309
Ted Kremenekdd54de82011-03-12 02:49:15 +0000310def IteratorsChecker : Checker<"Iterators">,
311 InPackage<CoreExperimental>,
312 HelpText<"Check improper uses of STL vector iterators">,
313 DescFile<"IteratorsChecker.cpp">;
314
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +0000315}