blob: 4dec676404e987bb9135f7c4107ed5bc8015401f [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">;
20
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +000021def CoreExperimental : Package<"experimental">,
22 InPackage<Core>, Hidden;
23
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +000024def CocoaExperimental : Package<"experimental">,
25 InPackage<Cocoa>, Hidden;
26
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +000027def UnixExperimental : Package<"experimental">,
28 InPackage<Unix>, Hidden;
29
Argyrios Kyrtzidis9fb94742011-02-17 21:39:24 +000030def LLVM : Package<"llvm">;
Argyrios Kyrtzidis2d67b902011-02-17 21:39:39 +000031def Debug : Package<"debug">;
Argyrios Kyrtzidis9fb94742011-02-17 21:39:24 +000032
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +000033//===----------------------------------------------------------------------===//
34// Groups.
35//===----------------------------------------------------------------------===//
36
37def AllExperimental : CheckerGroup<"all-experimental">,
38 Hidden;
39
40//===----------------------------------------------------------------------===//
41// Checkers.
42//===----------------------------------------------------------------------===//
43
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000044let ParentPackage = Cocoa in {
Argyrios Kyrtzidis43dee222011-02-14 18:13:31 +000045
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000046def ObjCSelfInitChecker : Checker<"SelfInit">,
Argyrios Kyrtzidis43dee222011-02-14 18:13:31 +000047 HelpText<"Check that 'self' is propely initialized inside an initializer method">,
48 DescFile<"ObjCSelfInitChecker.cpp">;
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000049
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000050def ObjCAtSyncChecker : Checker<"AtSync">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000051 HelpText<"Check for null pointers used as mutexes for @synchronized">,
52 DescFile<"ObjCAtSyncChecker.cpp">;
53
Argyrios Kyrtzidis0b1ba622011-02-16 01:40:52 +000054def NilArgChecker : Checker<"NilArg">,
55 HelpText<"Check for prohibited nil arguments to ObjC method calls">,
56 DescFile<"BasicObjCFoundationChecks.cpp">;
57
58def ClassReleaseChecker : Checker<"ClassRelease">,
59 HelpText<"Check for sending 'retain', 'release', or 'autorelease' directly to a Class">,
60 DescFile<"BasicObjCFoundationChecks.cpp">;
61
Ted Kremenekb8d545c2011-02-25 22:19:14 +000062def NSAutoreleasePoolChecker : Checker<"NSAutoreleasePool">,
63 HelpText<"Warn for subpar uses of NSAutoreleasePool">,
Argyrios Kyrtzidis0b1ba622011-02-16 01:40:52 +000064 DescFile<"NSAutoreleasePoolChecker.cpp">;
65
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +000066def ObjCMethSigsChecker : Checker<"MethodSigs">,
67 HelpText<"Warn about Objective-C method signatures with type incompatibilities">,
68 DescFile<"CheckObjCInstMethSignature.cpp">;
69
70def ObjCUnusedIvarsChecker : Checker<"UnusedIvars">,
71 HelpText<"Warn about private ivars that are never used">,
72 DescFile<"ObjCUnusedIVarsChecker.cpp">;
Argyrios Kyrtzidisb3d74da2011-02-28 17:36:18 +000073
74def NSErrorChecker : Checker<"NSError">,
75 HelpText<"Check usage of NSError** parameters">,
76 DescFile<"NSErrorChecker.cpp">;
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +000077
Ted Kremenekf5d2ef42011-02-25 22:00:43 +000078} // end "cocoa"
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000079
Argyrios Kyrtzidis10348702011-02-28 01:27:07 +000080let ParentPackage = Core in {
81
Argyrios Kyrtzidisb3d74da2011-02-28 17:36:18 +000082def DereferenceChecker : Checker<"Deref">,
83 HelpText<"Check for null pointers at loads and stores">,
84 DescFile<"DereferenceChecker.cpp">;
85
Argyrios Kyrtzidisd84f4222011-02-28 01:28:13 +000086def CallAndMessageChecker : Checker<"CallAndMsg">,
87 HelpText<"Check for errors of call and objc message expressions">,
88 DescFile<"CallAndMessageChecker.cpp">;
89
Argyrios Kyrtzidis139ca962011-02-28 01:28:05 +000090def AdjustedReturnValueChecker : Checker<"AdjustRet">,
91 HelpText<"Check to see if the return value of a function call is different than the caller expects">,
92 DescFile<"AdjustedReturnValueChecker.cpp">;
93
Argyrios Kyrtzidisbd900762011-02-28 01:28:01 +000094def AttrNonNullChecker : Checker<"AttrNonNull">,
95 HelpText<"Check for arguments declared to have nonnull attribute">,
96 DescFile<"AttrNonNullChecker.cpp">;
97
Argyrios Kyrtzidis3ce2b482011-02-28 01:27:54 +000098def VLASizeChecker : Checker<"VLASize">,
99 HelpText<"Check for declarations of VLA of undefined or zero size">,
100 DescFile<"VLASizeChecker.cpp">;
101
Argyrios Kyrtzidis919c9b92011-02-28 01:27:50 +0000102def DivZeroChecker : Checker<"DivZero">,
103 HelpText<"Check for division by zeros">,
104 DescFile<"DivZeroChecker.cpp">;
105
Argyrios Kyrtzidis7f649d72011-02-28 01:27:46 +0000106def ReturnUndefChecker : Checker<"UndefReturn">,
107 HelpText<"Check for undefined or garbage values being returned to the caller">,
108 DescFile<"ReturnUndefChecker.cpp">;
109
Argyrios Kyrtzidiseb290ca2011-02-28 01:27:41 +0000110def UndefinedArraySubscriptChecker : Checker<"UndefArraySubscript">,
111 HelpText<"Check for undefined array subscripts">,
112 DescFile<"UndefinedArraySubscriptChecker.cpp">;
113
Argyrios Kyrtzidis267aa5c2011-02-28 01:27:37 +0000114def UndefinedAssignmentChecker : Checker<"UndefAssign">,
115 HelpText<"Check for assigning undefined values">,
116 DescFile<"UndefinedAssignmentChecker.cpp">;
117
Argyrios Kyrtzidiscc05d512011-02-28 01:27:33 +0000118def UndefBranchChecker : Checker<"UndefBranch">,
119 HelpText<"Check for undefined branch conditions">,
120 DescFile<"UndefBranchChecker.cpp">;
121
Argyrios Kyrtzidis265c6742011-02-28 01:27:26 +0000122def UndefCapturedBlockVarChecker : Checker<"UndefBlockVar">,
123 HelpText<"Check for blocks that capture uninitialized values">,
124 DescFile<"UndefCapturedBlockVarChecker.cpp">;
125
Argyrios Kyrtzidis180e03f2011-02-28 01:27:22 +0000126def UndefResultChecker : Checker<"UndefBinOpResult">,
127 HelpText<"Check for undefined results of non-assignment binary operators">,
128 DescFile<"UndefResultChecker.cpp">;
129
Argyrios Kyrtzidis3267d952011-02-28 01:27:17 +0000130def NoReturnFunctionChecker : Checker<"NoReturnFunc">,
131 HelpText<"Evaluate functions that do not return to the caller">,
132 DescFile<"NoReturnFunctionChecker.cpp">;
133
Argyrios Kyrtzidis10348702011-02-28 01:27:07 +0000134def BuiltinFunctionChecker : Checker<"BuiltinFunc">,
135 HelpText<"Evaluate clang builtin functions">,
136 DescFile<"BuiltinFunctionChecker.cpp">;
137
Ted Kremenekf5d2ef42011-02-25 22:00:43 +0000138def StackAddrEscapeChecker : Checker<"StackAddrEscape">,
Ted Kremenekf5d2ef42011-02-25 22:00:43 +0000139 HelpText<"Check that addresses to stack memory do not escape the function">,
140 DescFile<"StackAddrEscapeChecker.cpp">;
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +0000141
Argyrios Kyrtzidisa676d502011-02-28 01:27:12 +0000142} // end "core"
143
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +0000144def DeadStoresChecker : Checker<"DeadStores">,
Ted Kremenekf5d2ef42011-02-25 22:00:43 +0000145 HelpText<"Check for values stored to a variables that are never read afterwards">,
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +0000146 DescFile<"DeadStoresChecker.cpp">;
147
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +0000148def UnixAPIChecker : Checker<"API">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +0000149 InPackage<Unix>,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +0000150 HelpText<"Check calls to various UNIX/Posix functions">,
151 DescFile<"UnixAPIChecker.cpp">;
152
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +0000153def MacOSXAPIChecker : Checker<"API">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +0000154 InPackage<MacOSX>,
Ted Kremenekf5d2ef42011-02-25 22:00:43 +0000155 HelpText<"Check for proper uses of various Mac OS X APIs">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +0000156 DescFile<"MacOSXAPIChecker.cpp">;
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +0000157
Argyrios Kyrtzidisf0293662011-02-28 01:27:02 +0000158def OSAtomicChecker : Checker<"AtomicCAS">,
159 InPackage<MacOSX>,
160 HelpText<"Evaluate calls to OSAtomic functions">,
161 DescFile<"OSAtomicChecker.cpp">;
162
Argyrios Kyrtzidis0b1ba622011-02-16 01:40:52 +0000163def CFNumberCreateChecker : Checker<"CFNumber">,
164 InPackage<MacOSX>,
Ted Kremenekf5d2ef42011-02-25 22:00:43 +0000165 HelpText<"Check for proper uses of CFNumberCreate">,
Argyrios Kyrtzidis0b1ba622011-02-16 01:40:52 +0000166 DescFile<"BasicObjCFoundationChecks.cpp">;
167
168def CFRetainReleaseChecker : Checker<"CFRetainRelease">,
169 InPackage<MacOSX>,
170 HelpText<"Check for null arguments to CFRetain/CFRelease">,
171 DescFile<"BasicObjCFoundationChecks.cpp">;
172
Argyrios Kyrtzidisb3d74da2011-02-28 17:36:18 +0000173def CFErrorChecker : Checker<"CFError">,
174 InPackage<MacOSX>,
175 HelpText<"Check usage of CFErrorRef* parameters">,
176 DescFile<"NSErrorChecker.cpp">;
177
Argyrios Kyrtzidis9fb94742011-02-17 21:39:24 +0000178def LLVMConventionsChecker : Checker<"Conventions">,
179 InPackage<LLVM>,
180 HelpText<"Check code for LLVM codebase conventions">,
181 DescFile<"LLVMConventionsChecker.cpp">;
182
Argyrios Kyrtzidis2d67b902011-02-17 21:39:39 +0000183def LiveVariablesDumper : Checker<"DumpLiveVars">,
184 InPackage<Debug>,
185 HelpText<"Print results of live variable analysis">,
186 DescFile<"DebugCheckers.cpp">;
187
188def CFGViewer : Checker<"ViewCFG">,
189 InPackage<Debug>,
190 HelpText<"View Control-Flow Graphs using GraphViz">,
191 DescFile<"DebugCheckers.cpp">;
192
193def CFGDumper : Checker<"DumpCFG">,
194 InPackage<Debug>,
195 HelpText<"Display Control-Flow Graphs">,
196 DescFile<"DebugCheckers.cpp">;
197
Argyrios Kyrtzidis58f2e7c2011-02-28 01:26:50 +0000198def AnalyzerStatsChecker : Checker<"Stats">,
199 InPackage<Debug>,
200 HelpText<"Emit warnings with analyzer statistics">,
201 DescFile<"AnalyzerStatsChecker.cpp">;
202
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +0000203//===----------------------------------------------------------------------===//
204// Hidden experimental checkers.
205//===----------------------------------------------------------------------===//
206
207let Group = AllExperimental in {
208
Argyrios Kyrtzidis05357012011-02-28 01:26:57 +0000209def ArrayBoundCheckerV2 : Checker<"Overflow">,
210 InPackage<CoreExperimental>,
211 HelpText<"Warn about buffer overflows">,
212 DescFile<"ArrayBoundCheckerV2.cpp">,
213 Hidden; // Must be specified explicitly in order to run.
214
Argyrios Kyrtzidis312dbec2011-02-28 01:26:35 +0000215def MallocChecker : Checker<"Malloc">,
216 InPackage<CoreExperimental>,
217 HelpText<"Check for potential memory leaks, double free, and use-after-free problems">,
218 DescFile<"MallocChecker.cpp">;
219
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +0000220def CStringChecker : Checker<"CString">,
221 InPackage<CoreExperimental>,
222 HelpText<"Check calls to functions in <string.h>">,
223 DescFile<"CStringChecker.cpp">;
224
225def UnreachableCodeChecker : Checker<"UnreachableCode">,
226 InPackage<CoreExperimental>,
227 HelpText<"Check unreachable code">,
Argyrios Kyrtzidis08099ad2011-02-24 21:42:52 +0000228 DescFile<"UnreachableCodeChecker.cpp">,
229 Hidden; // Must be specified explicitly in order to run.
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +0000230
Argyrios Kyrtzidisc9f2e0f2011-02-15 22:55:14 +0000231def IdempotentOperationChecker : Checker<"IdempotentOps">,
232 InPackage<CoreExperimental>,
233 HelpText<"Warn about idempotent operations">,
234 DescFile<"IdempotentOperationChecker.cpp">;
235
Argyrios Kyrtzidis23ade502011-02-15 22:55:20 +0000236def CastToStructChecker : Checker<"CastToStruct">,
237 InPackage<CoreExperimental>,
238 HelpText<"Check for cast from non-struct pointer to struct pointer">,
239 DescFile<"CastToStructChecker.cpp">;
240
241def FixedAddressChecker : Checker<"FixedAddr">,
242 InPackage<CoreExperimental>,
243 HelpText<"Check for assignment of a fixed address to a pointer">,
244 DescFile<"FixedAddressChecker.cpp">;
245
246def PointerArithChecker : Checker<"PointerArithm">,
247 InPackage<CoreExperimental>,
248 HelpText<"Check for pointer arithmetic on locations other than array elements">,
249 DescFile<"PointerArithChecker">;
250
251def PointerSubChecker : Checker<"PointerSub">,
252 InPackage<CoreExperimental>,
253 HelpText<"Check for pointer subtractions on two pointers pointing to different memory chunks">,
254 DescFile<"PointerSubChecker">;
255
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +0000256def SizeofPointerChecker : Checker<"SizeofPtr">,
257 InPackage<CoreExperimental>,
258 HelpText<"Warn about unintended use of sizeof() on pointer expressions">,
259 DescFile<"CheckSizeofPointer.cpp">;
260
261def SecuritySyntaxChecker : Checker<"SecuritySyntactic">,
262 InPackage<CoreExperimental>,
263 HelpText<"Perform quick security checks that require no data flow">,
264 DescFile<"CheckSecuritySyntaxOnly.cpp">;
265
Argyrios Kyrtzidis69355792011-02-24 08:41:57 +0000266def ReturnPointerRangeChecker : Checker<"ReturnPtrRange">,
267 InPackage<CoreExperimental>,
268 HelpText<"Check for an out-of-bound pointer being returned to callers">,
269 DescFile<"ReturnPointerRangeChecker.cpp">;
270
Argyrios Kyrtzidis8be5b3a2011-02-24 08:42:12 +0000271def ArrayBoundChecker : Checker<"ArrayBound">,
272 InPackage<CoreExperimental>,
273 HelpText<"Check for an out-of-bound pointer being returned to callers">,
274 DescFile<"ArrayBoundChecker.cpp">;
275
Argyrios Kyrtzidis0d6b0c02011-02-24 21:42:49 +0000276def CastSizeChecker : Checker<"CastSize">,
277 InPackage<CoreExperimental>,
278 HelpText<"Check when casting a malloc'ed type T, whether the size is a multiple of the size of T">,
279 DescFile<"CastSizeChecker.cpp">;
280
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +0000281def ObjCDeallocChecker : Checker<"Dealloc">,
282 InPackage<CocoaExperimental>,
283 HelpText<"Warn about Objective-C classes that lack a correct implementation of -dealloc">,
284 DescFile<"CheckObjCDealloc.cpp">;
285
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +0000286def ChrootChecker : Checker<"Chroot">,
287 InPackage<UnixExperimental>,
288 HelpText<"Check improper use of chroot">,
289 DescFile<"ChrootChecker.cpp">;
290
291def PthreadLockChecker : Checker<"PthreadLock">,
292 InPackage<UnixExperimental>,
293 HelpText<"Simple lock -> unlock checker">,
294 DescFile<"PthreadLockChecker.cpp">;
295
296def StreamChecker : Checker<"Stream">,
297 InPackage<UnixExperimental>,
298 HelpText<"Check stream handling functions">,
299 DescFile<"StreamChecker.cpp">;
300
301}