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