blob: 234c23f298bf5bb6abbe17a507b6cdb584477386 [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
24def UnixExperimental : Package<"experimental">,
25 InPackage<Unix>, Hidden;
26
Argyrios Kyrtzidis9fb94742011-02-17 21:39:24 +000027def LLVM : Package<"llvm">;
28
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +000029//===----------------------------------------------------------------------===//
30// Groups.
31//===----------------------------------------------------------------------===//
32
33def AllExperimental : CheckerGroup<"all-experimental">,
34 Hidden;
35
36//===----------------------------------------------------------------------===//
37// Checkers.
38//===----------------------------------------------------------------------===//
39
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000040let ParentPackage = Cocoa in {
Argyrios Kyrtzidis43dee222011-02-14 18:13:31 +000041
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000042def ObjCSelfInitChecker : Checker<"SelfInit">,
Argyrios Kyrtzidis43dee222011-02-14 18:13:31 +000043 HelpText<"Check that 'self' is propely initialized inside an initializer method">,
44 DescFile<"ObjCSelfInitChecker.cpp">;
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000045
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000046def ObjCAtSyncChecker : Checker<"AtSync">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000047 HelpText<"Check for null pointers used as mutexes for @synchronized">,
48 DescFile<"ObjCAtSyncChecker.cpp">;
49
Argyrios Kyrtzidis0b1ba622011-02-16 01:40:52 +000050def NilArgChecker : Checker<"NilArg">,
51 HelpText<"Check for prohibited nil arguments to ObjC method calls">,
52 DescFile<"BasicObjCFoundationChecks.cpp">;
53
54def ClassReleaseChecker : Checker<"ClassRelease">,
55 HelpText<"Check for sending 'retain', 'release', or 'autorelease' directly to a Class">,
56 DescFile<"BasicObjCFoundationChecks.cpp">;
57
58def NSAutoreleasePoolChecker : Checker<"NSAutoreleasePool">,
59 HelpText<"Warn for subpar uses of NSAutoreleasePool">,
60 DescFile<"NSAutoreleasePoolChecker.cpp">;
61
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000062}
63
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000064def StackAddrLeakChecker : Checker<"StackAddrLeak">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000065 InPackage<Core>,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000066 HelpText<"Check that addresses to stack memory are not leaked outside the function">,
67 DescFile<"StackAddrLeakChecker.cpp">;
68
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000069def UnixAPIChecker : Checker<"API">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000070 InPackage<Unix>,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000071 HelpText<"Check calls to various UNIX/Posix functions">,
72 DescFile<"UnixAPIChecker.cpp">;
73
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000074def MacOSXAPIChecker : Checker<"API">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000075 InPackage<MacOSX>,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000076 HelpText<"Check calls to various MacOSXAPIChecker">,
77 DescFile<"MacOSXAPIChecker.cpp">;
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +000078
Argyrios Kyrtzidis0b1ba622011-02-16 01:40:52 +000079def CFNumberCreateChecker : Checker<"CFNumber">,
80 InPackage<MacOSX>,
81 HelpText<"Check for CFNumberCreate">,
82 DescFile<"BasicObjCFoundationChecks.cpp">;
83
84def CFRetainReleaseChecker : Checker<"CFRetainRelease">,
85 InPackage<MacOSX>,
86 HelpText<"Check for null arguments to CFRetain/CFRelease">,
87 DescFile<"BasicObjCFoundationChecks.cpp">;
88
Argyrios Kyrtzidis9fb94742011-02-17 21:39:24 +000089def LLVMConventionsChecker : Checker<"Conventions">,
90 InPackage<LLVM>,
91 HelpText<"Check code for LLVM codebase conventions">,
92 DescFile<"LLVMConventionsChecker.cpp">;
93
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +000094//===----------------------------------------------------------------------===//
95// Hidden experimental checkers.
96//===----------------------------------------------------------------------===//
97
98let Group = AllExperimental in {
99
100def CStringChecker : Checker<"CString">,
101 InPackage<CoreExperimental>,
102 HelpText<"Check calls to functions in <string.h>">,
103 DescFile<"CStringChecker.cpp">;
104
105def UnreachableCodeChecker : Checker<"UnreachableCode">,
106 InPackage<CoreExperimental>,
107 HelpText<"Check unreachable code">,
108 DescFile<"UnreachableCodeChecker.cpp">;
109
Argyrios Kyrtzidisc9f2e0f2011-02-15 22:55:14 +0000110def IdempotentOperationChecker : Checker<"IdempotentOps">,
111 InPackage<CoreExperimental>,
112 HelpText<"Warn about idempotent operations">,
113 DescFile<"IdempotentOperationChecker.cpp">;
114
Argyrios Kyrtzidis23ade502011-02-15 22:55:20 +0000115def CastToStructChecker : Checker<"CastToStruct">,
116 InPackage<CoreExperimental>,
117 HelpText<"Check for cast from non-struct pointer to struct pointer">,
118 DescFile<"CastToStructChecker.cpp">;
119
120def FixedAddressChecker : Checker<"FixedAddr">,
121 InPackage<CoreExperimental>,
122 HelpText<"Check for assignment of a fixed address to a pointer">,
123 DescFile<"FixedAddressChecker.cpp">;
124
125def PointerArithChecker : Checker<"PointerArithm">,
126 InPackage<CoreExperimental>,
127 HelpText<"Check for pointer arithmetic on locations other than array elements">,
128 DescFile<"PointerArithChecker">;
129
130def PointerSubChecker : Checker<"PointerSub">,
131 InPackage<CoreExperimental>,
132 HelpText<"Check for pointer subtractions on two pointers pointing to different memory chunks">,
133 DescFile<"PointerSubChecker">;
134
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +0000135def ChrootChecker : Checker<"Chroot">,
136 InPackage<UnixExperimental>,
137 HelpText<"Check improper use of chroot">,
138 DescFile<"ChrootChecker.cpp">;
139
140def PthreadLockChecker : Checker<"PthreadLock">,
141 InPackage<UnixExperimental>,
142 HelpText<"Simple lock -> unlock checker">,
143 DescFile<"PthreadLockChecker.cpp">;
144
145def StreamChecker : Checker<"Stream">,
146 InPackage<UnixExperimental>,
147 HelpText<"Check stream handling functions">,
148 DescFile<"StreamChecker.cpp">;
149
150}