Checkers.td revision ade3195a201e16e989e9f93a568fb1806519077c
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 NSAutoreleasePoolChecker : Checker<"NSAutoreleasePool">,
64  HelpText<"Warn for subpar uses of NSAutoreleasePool">,
65  DescFile<"NSAutoreleasePoolChecker.cpp">;
66
67def ObjCMethSigsChecker : Checker<"MethodSigs">,
68  HelpText<"Warn about Objective-C method signatures with type incompatibilities">,
69  DescFile<"CheckObjCInstMethSignature.cpp">;
70
71def ObjCUnusedIvarsChecker : Checker<"UnusedIvars">,
72  HelpText<"Warn about private ivars that are never used">,
73  DescFile<"ObjCUnusedIVarsChecker.cpp">;
74 
75def NSErrorChecker : Checker<"NSError">,
76  HelpText<"Check usage of NSError** parameters">,
77  DescFile<"NSErrorChecker.cpp">;
78
79} // end "cocoa"
80
81let ParentPackage = Core in {
82
83def DereferenceChecker : Checker<"Deref">,
84  HelpText<"Check for null pointers at loads and stores">,
85  DescFile<"DereferenceChecker.cpp">;
86
87def CallAndMessageChecker : Checker<"CallAndMsg">,
88  HelpText<"Check for errors of call and objc message expressions">,
89  DescFile<"CallAndMessageChecker.cpp">;
90
91def AdjustedReturnValueChecker : Checker<"AdjustRet">,
92  HelpText<"Check to see if the return value of a function call is different than the caller expects">,
93  DescFile<"AdjustedReturnValueChecker.cpp">;
94
95def AttrNonNullChecker : Checker<"AttrNonNull">,
96  HelpText<"Check for arguments declared to have nonnull attribute">,
97  DescFile<"AttrNonNullChecker.cpp">;
98
99def VLASizeChecker : Checker<"VLASize">,
100  HelpText<"Check for declarations of VLA of undefined or zero size">,
101  DescFile<"VLASizeChecker.cpp">;
102
103def DivZeroChecker : Checker<"DivZero">,
104  HelpText<"Check for division by zeros">,
105  DescFile<"DivZeroChecker.cpp">;
106
107def ReturnUndefChecker : Checker<"UndefReturn">,
108  HelpText<"Check for undefined or garbage values being returned to the caller">,
109  DescFile<"ReturnUndefChecker.cpp">;
110
111def UndefinedArraySubscriptChecker : Checker<"UndefArraySubscript">,
112  HelpText<"Check for undefined array subscripts">,
113  DescFile<"UndefinedArraySubscriptChecker.cpp">;
114
115def UndefinedAssignmentChecker : Checker<"UndefAssign">,
116  HelpText<"Check for assigning undefined values">,
117  DescFile<"UndefinedAssignmentChecker.cpp">;
118
119def UndefBranchChecker : Checker<"UndefBranch">,
120  HelpText<"Check for undefined branch conditions">,
121  DescFile<"UndefBranchChecker.cpp">;
122
123def UndefCapturedBlockVarChecker : Checker<"UndefBlockVar">,
124  HelpText<"Check for blocks that capture uninitialized values">,
125  DescFile<"UndefCapturedBlockVarChecker.cpp">;
126
127def UndefResultChecker : Checker<"UndefBinOpResult">,
128  HelpText<"Check for undefined results of non-assignment binary operators">,
129  DescFile<"UndefResultChecker.cpp">;
130
131def NoReturnFunctionChecker : Checker<"NoReturnFunc">,
132  HelpText<"Evaluate functions that do not return to the caller">,
133  DescFile<"NoReturnFunctionChecker.cpp">;
134
135def BuiltinFunctionChecker : Checker<"BuiltinFunc">,
136  HelpText<"Evaluate clang builtin functions">,
137  DescFile<"BuiltinFunctionChecker.cpp">;
138
139def StackAddrEscapeChecker : Checker<"StackAddrEscape">,
140  HelpText<"Check that addresses to stack memory do not escape the function">,
141  DescFile<"StackAddrEscapeChecker.cpp">;
142
143} // end "core"
144
145let ParentPackage = DeadCode in {
146
147def DeadStoresChecker : Checker<"DeadStores">,
148  HelpText<"Check for values stored to a variables that are never read afterwards">,
149  DescFile<"DeadStoresChecker.cpp">;
150
151def IdempotentOperationChecker : Checker<"IdempotentOperations">,
152  HelpText<"Warn about idempotent operations">,
153  DescFile<"IdempotentOperationChecker.cpp">;
154
155} // end DeadCode
156
157def UnixAPIChecker : Checker<"API">,
158  InPackage<Unix>,
159  HelpText<"Check calls to various UNIX/Posix functions">,
160  DescFile<"UnixAPIChecker.cpp">;
161
162def MacOSXAPIChecker : Checker<"API">,
163  InPackage<MacOSX>,
164  HelpText<"Check for proper uses of various Mac OS X APIs">,
165  DescFile<"MacOSXAPIChecker.cpp">;
166
167def OSAtomicChecker : Checker<"AtomicCAS">,
168  InPackage<MacOSX>,
169  HelpText<"Evaluate calls to OSAtomic functions">,
170  DescFile<"OSAtomicChecker.cpp">;
171
172def CFNumberCreateChecker : Checker<"CFNumber">,
173  InPackage<MacOSX>,
174  HelpText<"Check for proper uses of CFNumberCreate">,
175  DescFile<"BasicObjCFoundationChecks.cpp">;
176
177def CFRetainReleaseChecker : Checker<"CFRetainRelease">,
178  InPackage<MacOSX>,
179  HelpText<"Check for null arguments to CFRetain/CFRelease">,
180  DescFile<"BasicObjCFoundationChecks.cpp">;
181
182def CFErrorChecker : Checker<"CFError">,
183  InPackage<MacOSX>,
184  HelpText<"Check usage of CFErrorRef* parameters">,
185  DescFile<"NSErrorChecker.cpp">;
186
187def LLVMConventionsChecker : Checker<"Conventions">,
188  InPackage<LLVM>,
189  HelpText<"Check code for LLVM codebase conventions">,
190  DescFile<"LLVMConventionsChecker.cpp">;
191
192def LiveVariablesDumper : Checker<"DumpLiveVars">,
193  InPackage<Debug>,
194  HelpText<"Print results of live variable analysis">,
195  DescFile<"DebugCheckers.cpp">;
196
197def CFGViewer : Checker<"ViewCFG">,
198  InPackage<Debug>,
199  HelpText<"View Control-Flow Graphs using GraphViz">,
200  DescFile<"DebugCheckers.cpp">;
201
202def CFGDumper : Checker<"DumpCFG">,
203  InPackage<Debug>,
204  HelpText<"Display Control-Flow Graphs">,
205  DescFile<"DebugCheckers.cpp">;
206
207def AnalyzerStatsChecker : Checker<"Stats">,
208  InPackage<Debug>,
209  HelpText<"Emit warnings with analyzer statistics">,
210  DescFile<"AnalyzerStatsChecker.cpp">;
211
212//===----------------------------------------------------------------------===//
213// Hidden experimental checkers.
214//===----------------------------------------------------------------------===//
215
216let Group = AllExperimental in {
217
218def ArrayBoundCheckerV2 : Checker<"Overflow">,
219  InPackage<CoreExperimental>,
220  HelpText<"Warn about buffer overflows">,
221  DescFile<"ArrayBoundCheckerV2.cpp">,
222  Hidden; // Must be specified explicitly in order to run.
223
224def MallocChecker : Checker<"Malloc">,
225  InPackage<CoreExperimental>,
226  HelpText<"Check for potential memory leaks, double free, and use-after-free problems">,
227  DescFile<"MallocChecker.cpp">;
228
229def CStringChecker : Checker<"CString">,
230  InPackage<CoreExperimental>,
231  HelpText<"Check calls to functions in <string.h>">,
232  DescFile<"CStringChecker.cpp">;
233
234def UnreachableCodeChecker : Checker<"UnreachableCode">,
235  InPackage<CoreExperimental>,
236  HelpText<"Check unreachable code">,
237  DescFile<"UnreachableCodeChecker.cpp">,
238  Hidden; // Must be specified explicitly in order to run.
239
240def CastToStructChecker : Checker<"CastToStruct">,
241  InPackage<CoreExperimental>,
242  HelpText<"Check for cast from non-struct pointer to struct pointer">,
243  DescFile<"CastToStructChecker.cpp">;
244
245def FixedAddressChecker : Checker<"FixedAddr">,
246  InPackage<CoreExperimental>,
247  HelpText<"Check for assignment of a fixed address to a pointer">,
248  DescFile<"FixedAddressChecker.cpp">;
249
250def PointerArithChecker : Checker<"PointerArithm">,
251  InPackage<CoreExperimental>,
252  HelpText<"Check for pointer arithmetic on locations other than array elements">,
253  DescFile<"PointerArithChecker">;
254
255def PointerSubChecker : Checker<"PointerSub">,
256  InPackage<CoreExperimental>,
257  HelpText<"Check for pointer subtractions on two pointers pointing to different memory chunks">,
258  DescFile<"PointerSubChecker">;
259
260def SizeofPointerChecker : Checker<"SizeofPtr">,
261  InPackage<CoreExperimental>,
262  HelpText<"Warn about unintended use of sizeof() on pointer expressions">,
263  DescFile<"CheckSizeofPointer.cpp">;
264
265def SecuritySyntaxChecker : Checker<"SecuritySyntactic">,
266  InPackage<CoreExperimental>,
267  HelpText<"Perform quick security checks that require no data flow">,
268  DescFile<"CheckSecuritySyntaxOnly.cpp">;
269
270def ReturnPointerRangeChecker : Checker<"ReturnPtrRange">,
271  InPackage<CoreExperimental>,
272  HelpText<"Check for an out-of-bound pointer being returned to callers">,
273  DescFile<"ReturnPointerRangeChecker.cpp">;
274
275def ArrayBoundChecker : Checker<"ArrayBound">,
276  InPackage<CoreExperimental>,
277  HelpText<"Check for an out-of-bound pointer being returned to callers">,
278  DescFile<"ArrayBoundChecker.cpp">;
279
280def CastSizeChecker : Checker<"CastSize">,
281  InPackage<CoreExperimental>,
282  HelpText<"Check when casting a malloc'ed type T, whether the size is a multiple of the size of T">,
283  DescFile<"CastSizeChecker.cpp">;
284
285def ObjCDeallocChecker : Checker<"Dealloc">,
286  InPackage<CocoaExperimental>,
287  HelpText<"Warn about Objective-C classes that lack a correct implementation of -dealloc">,
288  DescFile<"CheckObjCDealloc.cpp">;
289
290def ChrootChecker : Checker<"Chroot">,
291  InPackage<UnixExperimental>,
292  HelpText<"Check improper use of chroot">,
293  DescFile<"ChrootChecker.cpp">;
294
295def PthreadLockChecker : Checker<"PthreadLock">,
296  InPackage<UnixExperimental>,
297  HelpText<"Simple lock -> unlock checker">,
298  DescFile<"PthreadLockChecker.cpp">;
299
300def StreamChecker : Checker<"Stream">,
301  InPackage<UnixExperimental>,
302  HelpText<"Check stream handling functions">,
303  DescFile<"StreamChecker.cpp">;
304
305def IteratorsChecker : Checker<"Iterators">,
306  InPackage<CoreExperimental>,
307  HelpText<"Check improper uses of STL vector iterators">,
308  DescFile<"IteratorsChecker.cpp">;
309
310}
311