blob: 9bcd6c668dc774d35172ed17bd0fdccb1e824a01 [file] [log] [blame]
Argyrios Kyrtzidis43dee222011-02-14 18:13:31 +00001//===--- 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
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +000012//===----------------------------------------------------------------------===//
13// Packages.
14//===----------------------------------------------------------------------===//
15
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000016def Core : Package<"core">;
Argyrios Kyrtzidis43dee222011-02-14 18:13:31 +000017def Cocoa : Package<"cocoa">;
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000018def Unix : Package<"unix">;
19def MacOSX : Package<"macosx">;
20
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +000021def CoreExperimental : Package<"experimental">,
22 InPackage<Core>, Hidden;
23
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +000024def CocoaExperimental : Package<"experimental">,
25 InPackage<Cocoa>, Hidden;
26
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +000027def UnixExperimental : Package<"experimental">,
28 InPackage<Unix>, Hidden;
29
Argyrios Kyrtzidis9fb94742011-02-17 21:39:24 +000030def LLVM : Package<"llvm">;
Argyrios Kyrtzidis2d67b902011-02-17 21:39:39 +000031def Debug : Package<"debug">;
Argyrios Kyrtzidis9fb94742011-02-17 21:39:24 +000032
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +000033//===----------------------------------------------------------------------===//
34// Groups.
35//===----------------------------------------------------------------------===//
36
37def AllExperimental : CheckerGroup<"all-experimental">,
38 Hidden;
39
40//===----------------------------------------------------------------------===//
41// Checkers.
42//===----------------------------------------------------------------------===//
43
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000044let ParentPackage = Cocoa in {
Argyrios Kyrtzidis43dee222011-02-14 18:13:31 +000045
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000046def ObjCSelfInitChecker : Checker<"SelfInit">,
Argyrios Kyrtzidis43dee222011-02-14 18:13:31 +000047 HelpText<"Check that 'self' is propely initialized inside an initializer method">,
48 DescFile<"ObjCSelfInitChecker.cpp">;
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000049
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000050def ObjCAtSyncChecker : Checker<"AtSync">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000051 HelpText<"Check for null pointers used as mutexes for @synchronized">,
52 DescFile<"ObjCAtSyncChecker.cpp">;
53
Argyrios Kyrtzidis0b1ba622011-02-16 01:40:52 +000054def 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
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +000066def 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
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000074}
75
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000076def StackAddrLeakChecker : Checker<"StackAddrLeak">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000077 InPackage<Core>,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000078 HelpText<"Check that addresses to stack memory are not leaked outside the function">,
79 DescFile<"StackAddrLeakChecker.cpp">;
80
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +000081def DeadStoresChecker : Checker<"DeadStores">,
82 InPackage<Core>,
83 HelpText<"Check for stores to dead variables">,
84 DescFile<"DeadStoresChecker.cpp">;
85
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000086def UnixAPIChecker : Checker<"API">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000087 InPackage<Unix>,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000088 HelpText<"Check calls to various UNIX/Posix functions">,
89 DescFile<"UnixAPIChecker.cpp">;
90
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000091def MacOSXAPIChecker : Checker<"API">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000092 InPackage<MacOSX>,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000093 HelpText<"Check calls to various MacOSXAPIChecker">,
94 DescFile<"MacOSXAPIChecker.cpp">;
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +000095
Argyrios Kyrtzidis0b1ba622011-02-16 01:40:52 +000096def 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
Argyrios Kyrtzidis9fb94742011-02-17 21:39:24 +0000106def LLVMConventionsChecker : Checker<"Conventions">,
107 InPackage<LLVM>,
108 HelpText<"Check code for LLVM codebase conventions">,
109 DescFile<"LLVMConventionsChecker.cpp">;
110
Argyrios Kyrtzidis2d67b902011-02-17 21:39:39 +0000111def 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
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +0000126//===----------------------------------------------------------------------===//
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">,
Argyrios Kyrtzidis08099ad2011-02-24 21:42:52 +0000140 DescFile<"UnreachableCodeChecker.cpp">,
141 Hidden; // Must be specified explicitly in order to run.
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +0000142
Argyrios Kyrtzidisc9f2e0f2011-02-15 22:55:14 +0000143def IdempotentOperationChecker : Checker<"IdempotentOps">,
144 InPackage<CoreExperimental>,
145 HelpText<"Warn about idempotent operations">,
146 DescFile<"IdempotentOperationChecker.cpp">;
147
Argyrios Kyrtzidis23ade502011-02-15 22:55:20 +0000148def CastToStructChecker : Checker<"CastToStruct">,
149 InPackage<CoreExperimental>,
150 HelpText<"Check for cast from non-struct pointer to struct pointer">,
151 DescFile<"CastToStructChecker.cpp">;
152
153def FixedAddressChecker : Checker<"FixedAddr">,
154 InPackage<CoreExperimental>,
155 HelpText<"Check for assignment of a fixed address to a pointer">,
156 DescFile<"FixedAddressChecker.cpp">;
157
158def PointerArithChecker : Checker<"PointerArithm">,
159 InPackage<CoreExperimental>,
160 HelpText<"Check for pointer arithmetic on locations other than array elements">,
161 DescFile<"PointerArithChecker">;
162
163def PointerSubChecker : Checker<"PointerSub">,
164 InPackage<CoreExperimental>,
165 HelpText<"Check for pointer subtractions on two pointers pointing to different memory chunks">,
166 DescFile<"PointerSubChecker">;
167
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +0000168def SizeofPointerChecker : Checker<"SizeofPtr">,
169 InPackage<CoreExperimental>,
170 HelpText<"Warn about unintended use of sizeof() on pointer expressions">,
171 DescFile<"CheckSizeofPointer.cpp">;
172
173def SecuritySyntaxChecker : Checker<"SecuritySyntactic">,
174 InPackage<CoreExperimental>,
175 HelpText<"Perform quick security checks that require no data flow">,
176 DescFile<"CheckSecuritySyntaxOnly.cpp">;
177
Argyrios Kyrtzidis69355792011-02-24 08:41:57 +0000178def ReturnPointerRangeChecker : Checker<"ReturnPtrRange">,
179 InPackage<CoreExperimental>,
180 HelpText<"Check for an out-of-bound pointer being returned to callers">,
181 DescFile<"ReturnPointerRangeChecker.cpp">;
182
Argyrios Kyrtzidis8be5b3a2011-02-24 08:42:12 +0000183def ArrayBoundChecker : Checker<"ArrayBound">,
184 InPackage<CoreExperimental>,
185 HelpText<"Check for an out-of-bound pointer being returned to callers">,
186 DescFile<"ArrayBoundChecker.cpp">;
187
Argyrios Kyrtzidis0d6b0c02011-02-24 21:42:49 +0000188def CastSizeChecker : Checker<"CastSize">,
189 InPackage<CoreExperimental>,
190 HelpText<"Check when casting a malloc'ed type T, whether the size is a multiple of the size of T">,
191 DescFile<"CastSizeChecker.cpp">;
192
Argyrios Kyrtzidis7dd445e2011-02-17 21:39:33 +0000193def ObjCDeallocChecker : Checker<"Dealloc">,
194 InPackage<CocoaExperimental>,
195 HelpText<"Warn about Objective-C classes that lack a correct implementation of -dealloc">,
196 DescFile<"CheckObjCDealloc.cpp">;
197
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +0000198def ChrootChecker : Checker<"Chroot">,
199 InPackage<UnixExperimental>,
200 HelpText<"Check improper use of chroot">,
201 DescFile<"ChrootChecker.cpp">;
202
203def PthreadLockChecker : Checker<"PthreadLock">,
204 InPackage<UnixExperimental>,
205 HelpText<"Simple lock -> unlock checker">,
206 DescFile<"PthreadLockChecker.cpp">;
207
208def StreamChecker : Checker<"Stream">,
209 InPackage<UnixExperimental>,
210 HelpText<"Check stream handling functions">,
211 DescFile<"StreamChecker.cpp">;
212
213}