Checkers.td revision dd54de85cd98b85a79857723bcf3d7d95073a2a0
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">;
20
21def CoreExperimental : Package<"experimental">,
22  InPackage<Core>, Hidden;
23
24def CocoaExperimental : Package<"experimental">,
25  InPackage<Cocoa>, Hidden;
26
27def UnixExperimental : Package<"experimental">,
28  InPackage<Unix>, Hidden;
29
30def LLVM : Package<"llvm">;
31def Debug : Package<"debug">;
32
33//===----------------------------------------------------------------------===//
34// Groups.
35//===----------------------------------------------------------------------===//
36
37def AllExperimental : CheckerGroup<"all-experimental">,
38  Hidden;
39
40//===----------------------------------------------------------------------===//
41// Checkers.
42//===----------------------------------------------------------------------===//
43
44let ParentPackage = Cocoa in {
45
46def ObjCSelfInitChecker : Checker<"SelfInit">,
47  HelpText<"Check that 'self' is propely initialized inside an initializer method">,
48  DescFile<"ObjCSelfInitChecker.cpp">;
49
50def ObjCAtSyncChecker : Checker<"AtSync">,
51  HelpText<"Check for null pointers used as mutexes for @synchronized">,
52  DescFile<"ObjCAtSyncChecker.cpp">;
53
54def 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
62def NSAutoreleasePoolChecker : Checker<"NSAutoreleasePool">,
63  HelpText<"Warn for subpar uses of NSAutoreleasePool">,
64  DescFile<"NSAutoreleasePoolChecker.cpp">;
65
66def 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">;
73 
74def NSErrorChecker : Checker<"NSError">,
75  HelpText<"Check usage of NSError** parameters">,
76  DescFile<"NSErrorChecker.cpp">;
77
78} // end "cocoa"
79
80let ParentPackage = Core in {
81
82def DereferenceChecker : Checker<"Deref">,
83  HelpText<"Check for null pointers at loads and stores">,
84  DescFile<"DereferenceChecker.cpp">;
85
86def CallAndMessageChecker : Checker<"CallAndMsg">,
87  HelpText<"Check for errors of call and objc message expressions">,
88  DescFile<"CallAndMessageChecker.cpp">;
89
90def 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
94def AttrNonNullChecker : Checker<"AttrNonNull">,
95  HelpText<"Check for arguments declared to have nonnull attribute">,
96  DescFile<"AttrNonNullChecker.cpp">;
97
98def VLASizeChecker : Checker<"VLASize">,
99  HelpText<"Check for declarations of VLA of undefined or zero size">,
100  DescFile<"VLASizeChecker.cpp">;
101
102def DivZeroChecker : Checker<"DivZero">,
103  HelpText<"Check for division by zeros">,
104  DescFile<"DivZeroChecker.cpp">;
105
106def ReturnUndefChecker : Checker<"UndefReturn">,
107  HelpText<"Check for undefined or garbage values being returned to the caller">,
108  DescFile<"ReturnUndefChecker.cpp">;
109
110def UndefinedArraySubscriptChecker : Checker<"UndefArraySubscript">,
111  HelpText<"Check for undefined array subscripts">,
112  DescFile<"UndefinedArraySubscriptChecker.cpp">;
113
114def UndefinedAssignmentChecker : Checker<"UndefAssign">,
115  HelpText<"Check for assigning undefined values">,
116  DescFile<"UndefinedAssignmentChecker.cpp">;
117
118def UndefBranchChecker : Checker<"UndefBranch">,
119  HelpText<"Check for undefined branch conditions">,
120  DescFile<"UndefBranchChecker.cpp">;
121
122def UndefCapturedBlockVarChecker : Checker<"UndefBlockVar">,
123  HelpText<"Check for blocks that capture uninitialized values">,
124  DescFile<"UndefCapturedBlockVarChecker.cpp">;
125
126def UndefResultChecker : Checker<"UndefBinOpResult">,
127  HelpText<"Check for undefined results of non-assignment binary operators">,
128  DescFile<"UndefResultChecker.cpp">;
129
130def NoReturnFunctionChecker : Checker<"NoReturnFunc">,
131  HelpText<"Evaluate functions that do not return to the caller">,
132  DescFile<"NoReturnFunctionChecker.cpp">;
133
134def BuiltinFunctionChecker : Checker<"BuiltinFunc">,
135  HelpText<"Evaluate clang builtin functions">,
136  DescFile<"BuiltinFunctionChecker.cpp">;
137
138def StackAddrEscapeChecker : Checker<"StackAddrEscape">,
139  HelpText<"Check that addresses to stack memory do not escape the function">,
140  DescFile<"StackAddrEscapeChecker.cpp">;
141
142} // end "core"
143
144def DeadStoresChecker : Checker<"DeadStores">,
145  HelpText<"Check for values stored to a variables that are never read afterwards">,
146  DescFile<"DeadStoresChecker.cpp">;
147
148def UnixAPIChecker : Checker<"API">,
149  InPackage<Unix>,
150  HelpText<"Check calls to various UNIX/Posix functions">,
151  DescFile<"UnixAPIChecker.cpp">;
152
153def MacOSXAPIChecker : Checker<"API">,
154  InPackage<MacOSX>,
155  HelpText<"Check for proper uses of various Mac OS X APIs">,
156  DescFile<"MacOSXAPIChecker.cpp">;
157
158def OSAtomicChecker : Checker<"AtomicCAS">,
159  InPackage<MacOSX>,
160  HelpText<"Evaluate calls to OSAtomic functions">,
161  DescFile<"OSAtomicChecker.cpp">;
162
163def CFNumberCreateChecker : Checker<"CFNumber">,
164  InPackage<MacOSX>,
165  HelpText<"Check for proper uses of CFNumberCreate">,
166  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
173def CFErrorChecker : Checker<"CFError">,
174  InPackage<MacOSX>,
175  HelpText<"Check usage of CFErrorRef* parameters">,
176  DescFile<"NSErrorChecker.cpp">;
177
178def LLVMConventionsChecker : Checker<"Conventions">,
179  InPackage<LLVM>,
180  HelpText<"Check code for LLVM codebase conventions">,
181  DescFile<"LLVMConventionsChecker.cpp">;
182
183def 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
198def AnalyzerStatsChecker : Checker<"Stats">,
199  InPackage<Debug>,
200  HelpText<"Emit warnings with analyzer statistics">,
201  DescFile<"AnalyzerStatsChecker.cpp">;
202
203//===----------------------------------------------------------------------===//
204// Hidden experimental checkers.
205//===----------------------------------------------------------------------===//
206
207let Group = AllExperimental in {
208
209def 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
215def 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
220def 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">,
228  DescFile<"UnreachableCodeChecker.cpp">,
229  Hidden; // Must be specified explicitly in order to run.
230
231def IdempotentOperationChecker : Checker<"IdempotentOps">,
232  InPackage<CoreExperimental>,
233  HelpText<"Warn about idempotent operations">,
234  DescFile<"IdempotentOperationChecker.cpp">;
235
236def 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
256def 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
266def ReturnPointerRangeChecker : Checker<"ReturnPtrRange">,
267  InPackage<CoreExperimental>,
268  HelpText<"Check for an out-of-bound pointer being returned to callers">,
269  DescFile<"ReturnPointerRangeChecker.cpp">;
270
271def ArrayBoundChecker : Checker<"ArrayBound">,
272  InPackage<CoreExperimental>,
273  HelpText<"Check for an out-of-bound pointer being returned to callers">,
274  DescFile<"ArrayBoundChecker.cpp">;
275
276def 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
281def 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
286def 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
301def IteratorsChecker : Checker<"Iterators">,
302  InPackage<CoreExperimental>,
303  HelpText<"Check improper uses of STL vector iterators">,
304  DescFile<"IteratorsChecker.cpp">;
305
306}
307