Checkers.td revision 0d6b0c00823410c8d532fc15e40c9b62ae43a08b
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}
75
76def StackAddrLeakChecker : Checker<"StackAddrLeak">,
77  InPackage<Core>,
78  HelpText<"Check that addresses to stack memory are not leaked outside the function">,
79  DescFile<"StackAddrLeakChecker.cpp">;
80
81def DeadStoresChecker : Checker<"DeadStores">,
82  InPackage<Core>,
83  HelpText<"Check for stores to dead variables">,
84  DescFile<"DeadStoresChecker.cpp">;
85
86def UnixAPIChecker : Checker<"API">,
87  InPackage<Unix>,
88  HelpText<"Check calls to various UNIX/Posix functions">,
89  DescFile<"UnixAPIChecker.cpp">;
90
91def MacOSXAPIChecker : Checker<"API">,
92  InPackage<MacOSX>,
93  HelpText<"Check calls to various MacOSXAPIChecker">,
94  DescFile<"MacOSXAPIChecker.cpp">;
95
96def CFNumberCreateChecker : Checker<"CFNumber">,
97  InPackage<MacOSX>,
98  HelpText<"Check for CFNumberCreate">,
99  DescFile<"BasicObjCFoundationChecks.cpp">;
100
101def CFRetainReleaseChecker : Checker<"CFRetainRelease">,
102  InPackage<MacOSX>,
103  HelpText<"Check for null arguments to CFRetain/CFRelease">,
104  DescFile<"BasicObjCFoundationChecks.cpp">;
105
106def LLVMConventionsChecker : Checker<"Conventions">,
107  InPackage<LLVM>,
108  HelpText<"Check code for LLVM codebase conventions">,
109  DescFile<"LLVMConventionsChecker.cpp">;
110
111def LiveVariablesDumper : Checker<"DumpLiveVars">,
112  InPackage<Debug>,
113  HelpText<"Print results of live variable analysis">,
114  DescFile<"DebugCheckers.cpp">;
115
116def CFGViewer : Checker<"ViewCFG">,
117  InPackage<Debug>,
118  HelpText<"View Control-Flow Graphs using GraphViz">,
119  DescFile<"DebugCheckers.cpp">;
120
121def CFGDumper : Checker<"DumpCFG">,
122  InPackage<Debug>,
123  HelpText<"Display Control-Flow Graphs">,
124  DescFile<"DebugCheckers.cpp">;
125
126//===----------------------------------------------------------------------===//
127// Hidden experimental checkers.
128//===----------------------------------------------------------------------===//
129
130let Group = AllExperimental in {
131
132def CStringChecker : Checker<"CString">,
133  InPackage<CoreExperimental>,
134  HelpText<"Check calls to functions in <string.h>">,
135  DescFile<"CStringChecker.cpp">;
136
137def UnreachableCodeChecker : Checker<"UnreachableCode">,
138  InPackage<CoreExperimental>,
139  HelpText<"Check unreachable code">,
140  DescFile<"UnreachableCodeChecker.cpp">;
141
142def IdempotentOperationChecker : Checker<"IdempotentOps">,
143  InPackage<CoreExperimental>,
144  HelpText<"Warn about idempotent operations">,
145  DescFile<"IdempotentOperationChecker.cpp">;
146
147def CastToStructChecker : Checker<"CastToStruct">,
148  InPackage<CoreExperimental>,
149  HelpText<"Check for cast from non-struct pointer to struct pointer">,
150  DescFile<"CastToStructChecker.cpp">;
151
152def FixedAddressChecker : Checker<"FixedAddr">,
153  InPackage<CoreExperimental>,
154  HelpText<"Check for assignment of a fixed address to a pointer">,
155  DescFile<"FixedAddressChecker.cpp">;
156
157def PointerArithChecker : Checker<"PointerArithm">,
158  InPackage<CoreExperimental>,
159  HelpText<"Check for pointer arithmetic on locations other than array elements">,
160  DescFile<"PointerArithChecker">;
161
162def PointerSubChecker : Checker<"PointerSub">,
163  InPackage<CoreExperimental>,
164  HelpText<"Check for pointer subtractions on two pointers pointing to different memory chunks">,
165  DescFile<"PointerSubChecker">;
166
167def SizeofPointerChecker : Checker<"SizeofPtr">,
168  InPackage<CoreExperimental>,
169  HelpText<"Warn about unintended use of sizeof() on pointer expressions">,
170  DescFile<"CheckSizeofPointer.cpp">;
171
172def SecuritySyntaxChecker : Checker<"SecuritySyntactic">,
173  InPackage<CoreExperimental>,
174  HelpText<"Perform quick security checks that require no data flow">,
175  DescFile<"CheckSecuritySyntaxOnly.cpp">;
176
177def ReturnPointerRangeChecker : Checker<"ReturnPtrRange">,
178  InPackage<CoreExperimental>,
179  HelpText<"Check for an out-of-bound pointer being returned to callers">,
180  DescFile<"ReturnPointerRangeChecker.cpp">;
181
182def ArrayBoundChecker : Checker<"ArrayBound">,
183  InPackage<CoreExperimental>,
184  HelpText<"Check for an out-of-bound pointer being returned to callers">,
185  DescFile<"ArrayBoundChecker.cpp">;
186
187def CastSizeChecker : Checker<"CastSize">,
188  InPackage<CoreExperimental>,
189  HelpText<"Check when casting a malloc'ed type T, whether the size is a multiple of the size of T">,
190  DescFile<"CastSizeChecker.cpp">;
191
192def ObjCDeallocChecker : Checker<"Dealloc">,
193  InPackage<CocoaExperimental>,
194  HelpText<"Warn about Objective-C classes that lack a correct implementation of -dealloc">,
195  DescFile<"CheckObjCDealloc.cpp">;
196
197def ChrootChecker : Checker<"Chroot">,
198  InPackage<UnixExperimental>,
199  HelpText<"Check improper use of chroot">,
200  DescFile<"ChrootChecker.cpp">;
201
202def PthreadLockChecker : Checker<"PthreadLock">,
203  InPackage<UnixExperimental>,
204  HelpText<"Simple lock -> unlock checker">,
205  DescFile<"PthreadLockChecker.cpp">;
206
207def StreamChecker : Checker<"Stream">,
208  InPackage<UnixExperimental>,
209  HelpText<"Check stream handling functions">,
210  DescFile<"StreamChecker.cpp">;
211
212}
213