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