Checkers.td revision 4597b7b28e3a71f3c4f0ee3a3bd6a34423e6f885
1//===--- 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
12//===----------------------------------------------------------------------===//
13// Packages.
14//===----------------------------------------------------------------------===//
15
16def Core : Package<"core">;
17def Cocoa : Package<"cocoa">;
18def Unix : Package<"unix">;
19def MacOSX : Package<"macosx">;
20def DeadCode : Package<"deadcode">;
21
22def CoreExperimental : Package<"experimental">,
23  InPackage<Core>, Hidden;
24
25def CocoaExperimental : Package<"experimental">,
26  InPackage<Cocoa>, Hidden;
27
28def UnixExperimental : Package<"experimental">,
29  InPackage<Unix>, Hidden;
30
31def LLVM : Package<"llvm">;
32def Debug : Package<"debug">;
33
34//===----------------------------------------------------------------------===//
35// Groups.
36//===----------------------------------------------------------------------===//
37
38def AllExperimental : CheckerGroup<"all-experimental">,
39  Hidden;
40
41//===----------------------------------------------------------------------===//
42// Checkers.
43//===----------------------------------------------------------------------===//
44
45let ParentPackage = Cocoa in {
46
47def ObjCSelfInitChecker : Checker<"SelfInit">,
48  HelpText<"Check that 'self' is propely initialized inside an initializer method">,
49  DescFile<"ObjCSelfInitChecker.cpp">;
50
51def ObjCAtSyncChecker : Checker<"AtSync">,
52  HelpText<"Check for null pointers used as mutexes for @synchronized">,
53  DescFile<"ObjCAtSyncChecker.cpp">;
54
55def 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
63def 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
68def NSAutoreleasePoolChecker : Checker<"NSAutoreleasePool">,
69  HelpText<"Warn for subpar uses of NSAutoreleasePool">,
70  DescFile<"NSAutoreleasePoolChecker.cpp">;
71
72def 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">;
79 
80def NSErrorChecker : Checker<"NSError">,
81  HelpText<"Check usage of NSError** parameters">,
82  DescFile<"NSErrorChecker.cpp">;
83
84} // end "cocoa"
85
86let ParentPackage = Core in {
87
88def DereferenceChecker : Checker<"Deref">,
89  HelpText<"Check for null pointers at loads and stores">,
90  DescFile<"DereferenceChecker.cpp">;
91
92def CallAndMessageChecker : Checker<"CallAndMsg">,
93  HelpText<"Check for errors of call and objc message expressions">,
94  DescFile<"CallAndMessageChecker.cpp">;
95
96def 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
100def AttrNonNullChecker : Checker<"AttrNonNull">,
101  HelpText<"Check for arguments declared to have nonnull attribute">,
102  DescFile<"AttrNonNullChecker.cpp">;
103
104def VLASizeChecker : Checker<"VLASize">,
105  HelpText<"Check for declarations of VLA of undefined or zero size">,
106  DescFile<"VLASizeChecker.cpp">;
107
108def DivZeroChecker : Checker<"DivZero">,
109  HelpText<"Check for division by zeros">,
110  DescFile<"DivZeroChecker.cpp">;
111
112def ReturnUndefChecker : Checker<"UndefReturn">,
113  HelpText<"Check for undefined or garbage values being returned to the caller">,
114  DescFile<"ReturnUndefChecker.cpp">;
115
116def UndefinedArraySubscriptChecker : Checker<"UndefArraySubscript">,
117  HelpText<"Check for undefined array subscripts">,
118  DescFile<"UndefinedArraySubscriptChecker.cpp">;
119
120def UndefinedAssignmentChecker : Checker<"UndefAssign">,
121  HelpText<"Check for assigning undefined values">,
122  DescFile<"UndefinedAssignmentChecker.cpp">;
123
124def UndefBranchChecker : Checker<"UndefBranch">,
125  HelpText<"Check for undefined branch conditions">,
126  DescFile<"UndefBranchChecker.cpp">;
127
128def UndefCapturedBlockVarChecker : Checker<"UndefBlockVar">,
129  HelpText<"Check for blocks that capture uninitialized values">,
130  DescFile<"UndefCapturedBlockVarChecker.cpp">;
131
132def UndefResultChecker : Checker<"UndefBinOpResult">,
133  HelpText<"Check for undefined results of non-assignment binary operators">,
134  DescFile<"UndefResultChecker.cpp">;
135
136def NoReturnFunctionChecker : Checker<"NoReturnFunc">,
137  HelpText<"Evaluate functions that do not return to the caller">,
138  DescFile<"NoReturnFunctionChecker.cpp">;
139
140def BuiltinFunctionChecker : Checker<"BuiltinFunc">,
141  HelpText<"Evaluate clang builtin functions">,
142  DescFile<"BuiltinFunctionChecker.cpp">;
143
144def StackAddrEscapeChecker : Checker<"StackAddrEscape">,
145  HelpText<"Check that addresses to stack memory do not escape the function">,
146  DescFile<"StackAddrEscapeChecker.cpp">;
147
148} // end "core"
149
150let ParentPackage = DeadCode in {
151
152def DeadStoresChecker : Checker<"DeadStores">,
153  HelpText<"Check for values stored to a variables that are never read afterwards">,
154  DescFile<"DeadStoresChecker.cpp">;
155
156def IdempotentOperationChecker : Checker<"IdempotentOperations">,
157  HelpText<"Warn about idempotent operations">,
158  DescFile<"IdempotentOperationChecker.cpp">;
159
160} // end DeadCode
161
162def UnixAPIChecker : Checker<"API">,
163  InPackage<Unix>,
164  HelpText<"Check calls to various UNIX/Posix functions">,
165  DescFile<"UnixAPIChecker.cpp">;
166
167def MacOSXAPIChecker : Checker<"API">,
168  InPackage<MacOSX>,
169  HelpText<"Check for proper uses of various Mac OS X APIs">,
170  DescFile<"MacOSXAPIChecker.cpp">;
171
172def OSAtomicChecker : Checker<"AtomicCAS">,
173  InPackage<MacOSX>,
174  HelpText<"Evaluate calls to OSAtomic functions">,
175  DescFile<"OSAtomicChecker.cpp">;
176
177def CFNumberCreateChecker : Checker<"CFNumber">,
178  InPackage<MacOSX>,
179  HelpText<"Check for proper uses of CFNumberCreate">,
180  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
187def CFErrorChecker : Checker<"CFError">,
188  InPackage<MacOSX>,
189  HelpText<"Check usage of CFErrorRef* parameters">,
190  DescFile<"NSErrorChecker.cpp">;
191
192def LLVMConventionsChecker : Checker<"Conventions">,
193  InPackage<LLVM>,
194  HelpText<"Check code for LLVM codebase conventions">,
195  DescFile<"LLVMConventionsChecker.cpp">;
196
197def 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
212def AnalyzerStatsChecker : Checker<"Stats">,
213  InPackage<Debug>,
214  HelpText<"Emit warnings with analyzer statistics">,
215  DescFile<"AnalyzerStatsChecker.cpp">;
216
217//===----------------------------------------------------------------------===//
218// Hidden experimental checkers.
219//===----------------------------------------------------------------------===//
220
221let Group = AllExperimental in {
222
223def 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
229def 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
234def 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">,
242  DescFile<"UnreachableCodeChecker.cpp">,
243  Hidden; // Must be specified explicitly in order to run.
244
245def 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
265def 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
275def ReturnPointerRangeChecker : Checker<"ReturnPtrRange">,
276  InPackage<CoreExperimental>,
277  HelpText<"Check for an out-of-bound pointer being returned to callers">,
278  DescFile<"ReturnPointerRangeChecker.cpp">;
279
280def ArrayBoundChecker : Checker<"ArrayBound">,
281  InPackage<CoreExperimental>,
282  HelpText<"Check for an out-of-bound pointer being returned to callers">,
283  DescFile<"ArrayBoundChecker.cpp">;
284
285def 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
290def 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
295def 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
310def IteratorsChecker : Checker<"Iterators">,
311  InPackage<CoreExperimental>,
312  HelpText<"Check improper uses of STL vector iterators">,
313  DescFile<"IteratorsChecker.cpp">;
314
315}
316