blob: 5d30894ebe1caa1aaea8d30e25a2fdfa4da49cc7 [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
27//===----------------------------------------------------------------------===//
28// Groups.
29//===----------------------------------------------------------------------===//
30
31def AllExperimental : CheckerGroup<"all-experimental">,
32 Hidden;
33
34//===----------------------------------------------------------------------===//
35// Checkers.
36//===----------------------------------------------------------------------===//
37
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000038let ParentPackage = Cocoa in {
Argyrios Kyrtzidis43dee222011-02-14 18:13:31 +000039
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000040def ObjCSelfInitChecker : Checker<"SelfInit">,
Argyrios Kyrtzidis43dee222011-02-14 18:13:31 +000041 HelpText<"Check that 'self' is propely initialized inside an initializer method">,
42 DescFile<"ObjCSelfInitChecker.cpp">;
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000043
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000044def ObjCAtSyncChecker : Checker<"AtSync">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000045 HelpText<"Check for null pointers used as mutexes for @synchronized">,
46 DescFile<"ObjCAtSyncChecker.cpp">;
47
Argyrios Kyrtzidis0b1ba622011-02-16 01:40:52 +000048def NilArgChecker : Checker<"NilArg">,
49 HelpText<"Check for prohibited nil arguments to ObjC method calls">,
50 DescFile<"BasicObjCFoundationChecks.cpp">;
51
52def ClassReleaseChecker : Checker<"ClassRelease">,
53 HelpText<"Check for sending 'retain', 'release', or 'autorelease' directly to a Class">,
54 DescFile<"BasicObjCFoundationChecks.cpp">;
55
56def NSAutoreleasePoolChecker : Checker<"NSAutoreleasePool">,
57 HelpText<"Warn for subpar uses of NSAutoreleasePool">,
58 DescFile<"NSAutoreleasePoolChecker.cpp">;
59
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000060}
61
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000062def StackAddrLeakChecker : Checker<"StackAddrLeak">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000063 InPackage<Core>,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000064 HelpText<"Check that addresses to stack memory are not leaked outside the function">,
65 DescFile<"StackAddrLeakChecker.cpp">;
66
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000067def UnixAPIChecker : Checker<"API">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000068 InPackage<Unix>,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000069 HelpText<"Check calls to various UNIX/Posix functions">,
70 DescFile<"UnixAPIChecker.cpp">;
71
Argyrios Kyrtzidis26c05b12011-02-15 07:42:38 +000072def MacOSXAPIChecker : Checker<"API">,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000073 InPackage<MacOSX>,
Argyrios Kyrtzidis027a6ab2011-02-15 07:42:33 +000074 HelpText<"Check calls to various MacOSXAPIChecker">,
75 DescFile<"MacOSXAPIChecker.cpp">;
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +000076
Argyrios Kyrtzidis0b1ba622011-02-16 01:40:52 +000077def CFNumberCreateChecker : Checker<"CFNumber">,
78 InPackage<MacOSX>,
79 HelpText<"Check for CFNumberCreate">,
80 DescFile<"BasicObjCFoundationChecks.cpp">;
81
82def CFRetainReleaseChecker : Checker<"CFRetainRelease">,
83 InPackage<MacOSX>,
84 HelpText<"Check for null arguments to CFRetain/CFRelease">,
85 DescFile<"BasicObjCFoundationChecks.cpp">;
86
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +000087//===----------------------------------------------------------------------===//
88// Hidden experimental checkers.
89//===----------------------------------------------------------------------===//
90
91let Group = AllExperimental in {
92
93def CStringChecker : Checker<"CString">,
94 InPackage<CoreExperimental>,
95 HelpText<"Check calls to functions in <string.h>">,
96 DescFile<"CStringChecker.cpp">;
97
98def UnreachableCodeChecker : Checker<"UnreachableCode">,
99 InPackage<CoreExperimental>,
100 HelpText<"Check unreachable code">,
101 DescFile<"UnreachableCodeChecker.cpp">;
102
Argyrios Kyrtzidisc9f2e0f2011-02-15 22:55:14 +0000103def IdempotentOperationChecker : Checker<"IdempotentOps">,
104 InPackage<CoreExperimental>,
105 HelpText<"Warn about idempotent operations">,
106 DescFile<"IdempotentOperationChecker.cpp">;
107
Argyrios Kyrtzidis23ade502011-02-15 22:55:20 +0000108def CastToStructChecker : Checker<"CastToStruct">,
109 InPackage<CoreExperimental>,
110 HelpText<"Check for cast from non-struct pointer to struct pointer">,
111 DescFile<"CastToStructChecker.cpp">;
112
113def FixedAddressChecker : Checker<"FixedAddr">,
114 InPackage<CoreExperimental>,
115 HelpText<"Check for assignment of a fixed address to a pointer">,
116 DescFile<"FixedAddressChecker.cpp">;
117
118def PointerArithChecker : Checker<"PointerArithm">,
119 InPackage<CoreExperimental>,
120 HelpText<"Check for pointer arithmetic on locations other than array elements">,
121 DescFile<"PointerArithChecker">;
122
123def PointerSubChecker : Checker<"PointerSub">,
124 InPackage<CoreExperimental>,
125 HelpText<"Check for pointer subtractions on two pointers pointing to different memory chunks">,
126 DescFile<"PointerSubChecker">;
127
Argyrios Kyrtzidisa0decc92011-02-15 21:25:03 +0000128def ChrootChecker : Checker<"Chroot">,
129 InPackage<UnixExperimental>,
130 HelpText<"Check improper use of chroot">,
131 DescFile<"ChrootChecker.cpp">;
132
133def PthreadLockChecker : Checker<"PthreadLock">,
134 InPackage<UnixExperimental>,
135 HelpText<"Simple lock -> unlock checker">,
136 DescFile<"PthreadLockChecker.cpp">;
137
138def StreamChecker : Checker<"Stream">,
139 InPackage<UnixExperimental>,
140 HelpText<"Check stream handling functions">,
141 DescFile<"StreamChecker.cpp">;
142
143}