Checkers.td 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  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. include "clang/StaticAnalyzer/Checkers/CheckerBase.td"
  10. //===----------------------------------------------------------------------===//
  11. // Packages.
  12. //===----------------------------------------------------------------------===//
  13. def Alpha : Package<"alpha">;
  14. def Core : Package<"core">;
  15. def CoreBuiltin : Package<"builtin">, InPackage<Core>;
  16. def CoreUninitialized : Package<"uninitialized">, InPackage<Core>;
  17. def CoreAlpha : Package<"core">, InPackage<Alpha>, Hidden;
  18. def Cplusplus : Package<"cplusplus">;
  19. def CplusplusAlpha : Package<"cplusplus">, InPackage<Alpha>, Hidden;
  20. def DeadCode : Package<"deadcode">;
  21. def DeadCodeAlpha : Package<"deadcode">, InPackage<Alpha>, Hidden;
  22. def Security : Package <"security">;
  23. def InsecureAPI : Package<"insecureAPI">, InPackage<Security>;
  24. def SecurityAlpha : Package<"security">, InPackage<Alpha>, Hidden;
  25. def Taint : Package<"taint">, InPackage<SecurityAlpha>, Hidden;
  26. def Unix : Package<"unix">;
  27. def UnixAlpha : Package<"unix">, InPackage<Alpha>, Hidden;
  28. def CString : Package<"cstring">, InPackage<Unix>, Hidden;
  29. def CStringAlpha : Package<"cstring">, InPackage<UnixAlpha>, Hidden;
  30. def OSX : Package<"osx">;
  31. def OSXAlpha : Package<"osx">, InPackage<Alpha>, Hidden;
  32. def Cocoa : Package<"cocoa">, InPackage<OSX>;
  33. def CocoaAlpha : Package<"cocoa">, InPackage<OSXAlpha>, Hidden;
  34. def CoreFoundation : Package<"coreFoundation">, InPackage<OSX>;
  35. def Containers : Package<"containers">, InPackage<CoreFoundation>;
  36. def LLVM : Package<"llvm">;
  37. def Debug : Package<"debug">;
  38. //===----------------------------------------------------------------------===//
  39. // Core Checkers.
  40. //===----------------------------------------------------------------------===//
  41. let ParentPackage = Core in {
  42. def DereferenceChecker : Checker<"NullDereference">,
  43. HelpText<"Check for dereferences of null pointers">,
  44. DescFile<"DereferenceChecker.cpp">;
  45. def CallAndMessageChecker : Checker<"CallAndMessage">,
  46. HelpText<"Check for logical errors for function calls and Objective-C message expressions (e.g., uninitialized arguments, null function pointers)">,
  47. DescFile<"CallAndMessageChecker.cpp">;
  48. def NonNullParamChecker : Checker<"NonNullParamChecker">,
  49. HelpText<"Check for null pointers passed as arguments to a function whose arguments are references or marked with the 'nonnull' attribute">,
  50. DescFile<"NonNullParamChecker.cpp">;
  51. def VLASizeChecker : Checker<"VLASize">,
  52. HelpText<"Check for declarations of VLA of undefined or zero size">,
  53. DescFile<"VLASizeChecker.cpp">;
  54. def DivZeroChecker : Checker<"DivideZero">,
  55. HelpText<"Check for division by zero">,
  56. DescFile<"DivZeroChecker.cpp">;
  57. def UndefResultChecker : Checker<"UndefinedBinaryOperatorResult">,
  58. HelpText<"Check for undefined results of binary operators">,
  59. DescFile<"UndefResultChecker.cpp">;
  60. def StackAddrEscapeChecker : Checker<"StackAddressEscape">,
  61. HelpText<"Check that addresses to stack memory do not escape the function">,
  62. DescFile<"StackAddrEscapeChecker.cpp">;
  63. def DynamicTypePropagation : Checker<"DynamicTypePropagation">,
  64. HelpText<"Generate dynamic type information">,
  65. DescFile<"DynamicTypePropagation.cpp">;
  66. } // end "core"
  67. let ParentPackage = CoreAlpha in {
  68. def BoolAssignmentChecker : Checker<"BoolAssignment">,
  69. HelpText<"Warn about assigning non-{0,1} values to Boolean variables">,
  70. DescFile<"BoolAssignmentChecker.cpp">;
  71. def CastSizeChecker : Checker<"CastSize">,
  72. HelpText<"Check when casting a malloc'ed type T, whether the size is a multiple of the size of T">,
  73. DescFile<"CastSizeChecker.cpp">;
  74. def CastToStructChecker : Checker<"CastToStruct">,
  75. HelpText<"Check for cast from non-struct pointer to struct pointer">,
  76. DescFile<"CastToStructChecker.cpp">;
  77. def IdenticalExprChecker : Checker<"IdenticalExpr">,
  78. HelpText<"Warn about unintended use of identical expressions in operators">,
  79. DescFile<"IdenticalExprChecker.cpp">;
  80. def FixedAddressChecker : Checker<"FixedAddr">,
  81. HelpText<"Check for assignment of a fixed address to a pointer">,
  82. DescFile<"FixedAddressChecker.cpp">;
  83. def PointerArithChecker : Checker<"PointerArithm">,
  84. HelpText<"Check for pointer arithmetic on locations other than array elements">,
  85. DescFile<"PointerArithChecker">;
  86. def PointerSubChecker : Checker<"PointerSub">,
  87. HelpText<"Check for pointer subtractions on two pointers pointing to different memory chunks">,
  88. DescFile<"PointerSubChecker">;
  89. def SizeofPointerChecker : Checker<"SizeofPtr">,
  90. HelpText<"Warn about unintended use of sizeof() on pointer expressions">,
  91. DescFile<"CheckSizeofPointer.cpp">;
  92. def CallAndMessageUnInitRefArg : Checker<"CallAndMessageUnInitRefArg">,
  93. HelpText<"Check for logical errors for function calls and Objective-C message expressions (e.g., uninitialized arguments, null function pointers, and pointer to undefined variables)">,
  94. DescFile<"CallAndMessageChecker.cpp">;
  95. def TestAfterDivZeroChecker : Checker<"TestAfterDivZero">,
  96. HelpText<"Check for division by variable that is later compared against 0. Either the comparison is useless or there is division by zero.">,
  97. DescFile<"TestAfterDivZeroChecker.cpp">;
  98. } // end "alpha.core"
  99. //===----------------------------------------------------------------------===//
  100. // Evaluate "builtin" functions.
  101. //===----------------------------------------------------------------------===//
  102. let ParentPackage = CoreBuiltin in {
  103. def NoReturnFunctionChecker : Checker<"NoReturnFunctions">,
  104. HelpText<"Evaluate \"panic\" functions that are known to not return to the caller">,
  105. DescFile<"NoReturnFunctionChecker.cpp">;
  106. def BuiltinFunctionChecker : Checker<"BuiltinFunctions">,
  107. HelpText<"Evaluate compiler builtin functions (e.g., alloca())">,
  108. DescFile<"BuiltinFunctionChecker.cpp">;
  109. } // end "core.builtin"
  110. //===----------------------------------------------------------------------===//
  111. // Uninitialized values checkers.
  112. //===----------------------------------------------------------------------===//
  113. let ParentPackage = CoreUninitialized in {
  114. def UndefinedArraySubscriptChecker : Checker<"ArraySubscript">,
  115. HelpText<"Check for uninitialized values used as array subscripts">,
  116. DescFile<"UndefinedArraySubscriptChecker.cpp">;
  117. def UndefinedAssignmentChecker : Checker<"Assign">,
  118. HelpText<"Check for assigning uninitialized values">,
  119. DescFile<"UndefinedAssignmentChecker.cpp">;
  120. def UndefBranchChecker : Checker<"Branch">,
  121. HelpText<"Check for uninitialized values used as branch conditions">,
  122. DescFile<"UndefBranchChecker.cpp">;
  123. def UndefCapturedBlockVarChecker : Checker<"CapturedBlockVariable">,
  124. HelpText<"Check for blocks that capture uninitialized values">,
  125. DescFile<"UndefCapturedBlockVarChecker.cpp">;
  126. def ReturnUndefChecker : Checker<"UndefReturn">,
  127. HelpText<"Check for uninitialized values being returned to the caller">,
  128. DescFile<"ReturnUndefChecker.cpp">;
  129. } // end "core.uninitialized"
  130. //===----------------------------------------------------------------------===//
  131. // C++ checkers.
  132. //===----------------------------------------------------------------------===//
  133. let ParentPackage = Cplusplus in {
  134. def NewDeleteChecker : Checker<"NewDelete">,
  135. HelpText<"Check for double-free and use-after-free problems. Traces memory managed by new/delete.">,
  136. DescFile<"MallocChecker.cpp">;
  137. def NewDeleteLeaksChecker : Checker<"NewDeleteLeaks">,
  138. HelpText<"Check for memory leaks. Traces memory managed by new/delete.">,
  139. DescFile<"MallocChecker.cpp">;
  140. } // end: "cplusplus"
  141. let ParentPackage = CplusplusAlpha in {
  142. def VirtualCallChecker : Checker<"VirtualCall">,
  143. HelpText<"Check virtual function calls during construction or destruction">,
  144. DescFile<"VirtualCallChecker.cpp">;
  145. } // end: "alpha.cplusplus"
  146. //===----------------------------------------------------------------------===//
  147. // Deadcode checkers.
  148. //===----------------------------------------------------------------------===//
  149. let ParentPackage = DeadCode in {
  150. def DeadStoresChecker : Checker<"DeadStores">,
  151. HelpText<"Check for values stored to variables that are never read afterwards">,
  152. DescFile<"DeadStoresChecker.cpp">;
  153. } // end DeadCode
  154. let ParentPackage = DeadCodeAlpha in {
  155. def UnreachableCodeChecker : Checker<"UnreachableCode">,
  156. HelpText<"Check unreachable code">,
  157. DescFile<"UnreachableCodeChecker.cpp">;
  158. } // end "alpha.deadcode"
  159. //===----------------------------------------------------------------------===//
  160. // Security checkers.
  161. //===----------------------------------------------------------------------===//
  162. let ParentPackage = InsecureAPI in {
  163. def gets : Checker<"gets">,
  164. HelpText<"Warn on uses of the 'gets' function">,
  165. DescFile<"CheckSecuritySyntaxOnly.cpp">;
  166. def getpw : Checker<"getpw">,
  167. HelpText<"Warn on uses of the 'getpw' function">,
  168. DescFile<"CheckSecuritySyntaxOnly.cpp">;
  169. def mktemp : Checker<"mktemp">,
  170. HelpText<"Warn on uses of the 'mktemp' function">,
  171. DescFile<"CheckSecuritySyntaxOnly.cpp">;
  172. def mkstemp : Checker<"mkstemp">,
  173. HelpText<"Warn when 'mkstemp' is passed fewer than 6 X's in the format string">,
  174. DescFile<"CheckSecuritySyntaxOnly.cpp">;
  175. def rand : Checker<"rand">,
  176. HelpText<"Warn on uses of the 'rand', 'random', and related functions">,
  177. DescFile<"CheckSecuritySyntaxOnly.cpp">;
  178. def strcpy : Checker<"strcpy">,
  179. HelpText<"Warn on uses of the 'strcpy' and 'strcat' functions">,
  180. DescFile<"CheckSecuritySyntaxOnly.cpp">;
  181. def vfork : Checker<"vfork">,
  182. HelpText<"Warn on uses of the 'vfork' function">,
  183. DescFile<"CheckSecuritySyntaxOnly.cpp">;
  184. def UncheckedReturn : Checker<"UncheckedReturn">,
  185. HelpText<"Warn on uses of functions whose return values must be always checked">,
  186. DescFile<"CheckSecuritySyntaxOnly.cpp">;
  187. }
  188. let ParentPackage = Security in {
  189. def FloatLoopCounter : Checker<"FloatLoopCounter">,
  190. HelpText<"Warn on using a floating point value as a loop counter (CERT: FLP30-C, FLP30-CPP)">,
  191. DescFile<"CheckSecuritySyntaxOnly.cpp">;
  192. }
  193. let ParentPackage = SecurityAlpha in {
  194. def ArrayBoundChecker : Checker<"ArrayBound">,
  195. HelpText<"Warn about buffer overflows (older checker)">,
  196. DescFile<"ArrayBoundChecker.cpp">;
  197. def ArrayBoundCheckerV2 : Checker<"ArrayBoundV2">,
  198. HelpText<"Warn about buffer overflows (newer checker)">,
  199. DescFile<"ArrayBoundCheckerV2.cpp">;
  200. def ReturnPointerRangeChecker : Checker<"ReturnPtrRange">,
  201. HelpText<"Check for an out-of-bound pointer being returned to callers">,
  202. DescFile<"ReturnPointerRangeChecker.cpp">;
  203. def MallocOverflowSecurityChecker : Checker<"MallocOverflow">,
  204. HelpText<"Check for overflows in the arguments to malloc()">,
  205. DescFile<"MallocOverflowSecurityChecker.cpp">;
  206. } // end "alpha.security"
  207. //===----------------------------------------------------------------------===//
  208. // Taint checkers.
  209. //===----------------------------------------------------------------------===//
  210. let ParentPackage = Taint in {
  211. def GenericTaintChecker : Checker<"TaintPropagation">,
  212. HelpText<"Generate taint information used by other checkers">,
  213. DescFile<"GenericTaintChecker.cpp">;
  214. } // end "alpha.security.taint"
  215. //===----------------------------------------------------------------------===//
  216. // Unix API checkers.
  217. //===----------------------------------------------------------------------===//
  218. let ParentPackage = Unix in {
  219. def UnixAPIChecker : Checker<"API">,
  220. HelpText<"Check calls to various UNIX/Posix functions">,
  221. DescFile<"UnixAPIChecker.cpp">;
  222. def MallocChecker: Checker<"Malloc">,
  223. HelpText<"Check for memory leaks, double free, and use-after-free problems. Traces memory managed by malloc()/free().">,
  224. DescFile<"MallocChecker.cpp">;
  225. def MallocSizeofChecker : Checker<"MallocSizeof">,
  226. HelpText<"Check for dubious malloc arguments involving sizeof">,
  227. DescFile<"MallocSizeofChecker.cpp">;
  228. def MismatchedDeallocatorChecker : Checker<"MismatchedDeallocator">,
  229. HelpText<"Check for mismatched deallocators.">,
  230. DescFile<"MallocChecker.cpp">;
  231. } // end "unix"
  232. let ParentPackage = UnixAlpha in {
  233. def ChrootChecker : Checker<"Chroot">,
  234. HelpText<"Check improper use of chroot">,
  235. DescFile<"ChrootChecker.cpp">;
  236. def PthreadLockChecker : Checker<"PthreadLock">,
  237. HelpText<"Simple lock -> unlock checker">,
  238. DescFile<"PthreadLockChecker.cpp">;
  239. def StreamChecker : Checker<"Stream">,
  240. HelpText<"Check stream handling functions">,
  241. DescFile<"StreamChecker.cpp">;
  242. def SimpleStreamChecker : Checker<"SimpleStream">,
  243. HelpText<"Check for misuses of stream APIs">,
  244. DescFile<"SimpleStreamChecker.cpp">;
  245. } // end "alpha.unix"
  246. let ParentPackage = CString in {
  247. def CStringNullArg : Checker<"NullArg">,
  248. HelpText<"Check for null pointers being passed as arguments to C string functions">,
  249. DescFile<"CStringChecker.cpp">;
  250. def CStringSyntaxChecker : Checker<"BadSizeArg">,
  251. HelpText<"Check the size argument passed into C string functions for common erroneous patterns">,
  252. DescFile<"CStringSyntaxChecker.cpp">;
  253. }
  254. let ParentPackage = CStringAlpha in {
  255. def CStringOutOfBounds : Checker<"OutOfBounds">,
  256. HelpText<"Check for out-of-bounds access in string functions">,
  257. DescFile<"CStringChecker.cpp">;
  258. def CStringBufferOverlap : Checker<"BufferOverlap">,
  259. HelpText<"Checks for overlap in two buffer arguments">,
  260. DescFile<"CStringChecker.cpp">;
  261. def CStringNotNullTerm : Checker<"NotNullTerminated">,
  262. HelpText<"Check for arguments which are not null-terminating strings">,
  263. DescFile<"CStringChecker.cpp">;
  264. }
  265. //===----------------------------------------------------------------------===//
  266. // Mac OS X, Cocoa, and Core Foundation checkers.
  267. //===----------------------------------------------------------------------===//
  268. let ParentPackage = OSX in {
  269. def MacOSXAPIChecker : Checker<"API">,
  270. InPackage<OSX>,
  271. HelpText<"Check for proper uses of various Apple APIs">,
  272. DescFile<"MacOSXAPIChecker.cpp">;
  273. def MacOSKeychainAPIChecker : Checker<"SecKeychainAPI">,
  274. InPackage<OSX>,
  275. HelpText<"Check for proper uses of Secure Keychain APIs">,
  276. DescFile<"MacOSKeychainAPIChecker.cpp">;
  277. } // end "osx"
  278. let ParentPackage = Cocoa in {
  279. def ObjCAtSyncChecker : Checker<"AtSync">,
  280. HelpText<"Check for nil pointers used as mutexes for @synchronized">,
  281. DescFile<"ObjCAtSyncChecker.cpp">;
  282. def NilArgChecker : Checker<"NilArg">,
  283. HelpText<"Check for prohibited nil arguments to ObjC method calls">,
  284. DescFile<"BasicObjCFoundationChecks.cpp">;
  285. def ClassReleaseChecker : Checker<"ClassRelease">,
  286. HelpText<"Check for sending 'retain', 'release', or 'autorelease' directly to a Class">,
  287. DescFile<"BasicObjCFoundationChecks.cpp">;
  288. def VariadicMethodTypeChecker : Checker<"VariadicMethodTypes">,
  289. HelpText<"Check for passing non-Objective-C types to variadic collection "
  290. "initialization methods that expect only Objective-C types">,
  291. DescFile<"BasicObjCFoundationChecks.cpp">;
  292. def NSAutoreleasePoolChecker : Checker<"NSAutoreleasePool">,
  293. HelpText<"Warn for suboptimal uses of NSAutoreleasePool in Objective-C GC mode">,
  294. DescFile<"NSAutoreleasePoolChecker.cpp">;
  295. def ObjCMethSigsChecker : Checker<"IncompatibleMethodTypes">,
  296. HelpText<"Warn about Objective-C method signatures with type incompatibilities">,
  297. DescFile<"CheckObjCInstMethSignature.cpp">;
  298. def ObjCUnusedIvarsChecker : Checker<"UnusedIvars">,
  299. HelpText<"Warn about private ivars that are never used">,
  300. DescFile<"ObjCUnusedIVarsChecker.cpp">;
  301. def ObjCSelfInitChecker : Checker<"SelfInit">,
  302. HelpText<"Check that 'self' is properly initialized inside an initializer method">,
  303. DescFile<"ObjCSelfInitChecker.cpp">;
  304. def ObjCLoopChecker : Checker<"Loops">,
  305. HelpText<"Improved modeling of loops using Cocoa collection types">,
  306. DescFile<"BasicObjCFoundationChecks.cpp">;
  307. def ObjCNonNilReturnValueChecker : Checker<"NonNilReturnValue">,
  308. HelpText<"Model the APIs that are guaranteed to return a non-nil value">,
  309. DescFile<"BasicObjCFoundationChecks.cpp">;
  310. def ObjCSuperCallChecker : Checker<"MissingSuperCall">,
  311. HelpText<"Warn about Objective-C methods that lack a necessary call to super">,
  312. DescFile<"ObjCMissingSuperCallChecker.cpp">;
  313. def NSErrorChecker : Checker<"NSError">,
  314. HelpText<"Check usage of NSError** parameters">,
  315. DescFile<"NSErrorChecker.cpp">;
  316. def RetainCountChecker : Checker<"RetainCount">,
  317. HelpText<"Check for leaks and improper reference count management">,
  318. DescFile<"RetainCountChecker.cpp">;
  319. } // end "osx.cocoa"
  320. let ParentPackage = CocoaAlpha in {
  321. def ObjCDeallocChecker : Checker<"Dealloc">,
  322. HelpText<"Warn about Objective-C classes that lack a correct implementation of -dealloc">,
  323. DescFile<"CheckObjCDealloc.cpp">;
  324. def InstanceVariableInvalidation : Checker<"InstanceVariableInvalidation">,
  325. HelpText<"Check that the invalidatable instance variables are invalidated in the methods annotated with objc_instance_variable_invalidator">,
  326. DescFile<"IvarInvalidationChecker.cpp">;
  327. def MissingInvalidationMethod : Checker<"MissingInvalidationMethod">,
  328. HelpText<"Check that the invalidation methods are present in classes that contain invalidatable instance variables">,
  329. DescFile<"IvarInvalidationChecker.cpp">;
  330. def DirectIvarAssignment : Checker<"DirectIvarAssignment">,
  331. HelpText<"Check for direct assignments to instance variables">,
  332. DescFile<"DirectIvarAssignment.cpp">;
  333. def DirectIvarAssignmentForAnnotatedFunctions : Checker<"DirectIvarAssignmentForAnnotatedFunctions">,
  334. HelpText<"Check for direct assignments to instance variables in the methods annotated with objc_no_direct_instance_variable_assignment">,
  335. DescFile<"DirectIvarAssignment.cpp">;
  336. } // end "alpha.osx.cocoa"
  337. let ParentPackage = CoreFoundation in {
  338. def CFNumberCreateChecker : Checker<"CFNumber">,
  339. HelpText<"Check for proper uses of CFNumberCreate">,
  340. DescFile<"BasicObjCFoundationChecks.cpp">;
  341. def CFRetainReleaseChecker : Checker<"CFRetainRelease">,
  342. HelpText<"Check for null arguments to CFRetain/CFRelease/CFMakeCollectable">,
  343. DescFile<"BasicObjCFoundationChecks.cpp">;
  344. def CFErrorChecker : Checker<"CFError">,
  345. HelpText<"Check usage of CFErrorRef* parameters">,
  346. DescFile<"NSErrorChecker.cpp">;
  347. }
  348. let ParentPackage = Containers in {
  349. def ObjCContainersASTChecker : Checker<"PointerSizedValues">,
  350. HelpText<"Warns if 'CFArray', 'CFDictionary', 'CFSet' are created with non-pointer-size values">,
  351. DescFile<"ObjCContainersASTChecker.cpp">;
  352. def ObjCContainersChecker : Checker<"OutOfBounds">,
  353. HelpText<"Checks for index out-of-bounds when using 'CFArray' API">,
  354. DescFile<"ObjCContainersChecker.cpp">;
  355. }
  356. //===----------------------------------------------------------------------===//
  357. // Checkers for LLVM development.
  358. //===----------------------------------------------------------------------===//
  359. def LLVMConventionsChecker : Checker<"Conventions">,
  360. InPackage<LLVM>,
  361. HelpText<"Check code for LLVM codebase conventions">,
  362. DescFile<"LLVMConventionsChecker.cpp">;
  363. //===----------------------------------------------------------------------===//
  364. // Debugging checkers (for analyzer development).
  365. //===----------------------------------------------------------------------===//
  366. let ParentPackage = Debug in {
  367. def DominatorsTreeDumper : Checker<"DumpDominators">,
  368. HelpText<"Print the dominance tree for a given CFG">,
  369. DescFile<"DebugCheckers.cpp">;
  370. def LiveVariablesDumper : Checker<"DumpLiveVars">,
  371. HelpText<"Print results of live variable analysis">,
  372. DescFile<"DebugCheckers.cpp">;
  373. def CFGViewer : Checker<"ViewCFG">,
  374. HelpText<"View Control-Flow Graphs using GraphViz">,
  375. DescFile<"DebugCheckers.cpp">;
  376. def CFGDumper : Checker<"DumpCFG">,
  377. HelpText<"Display Control-Flow Graphs">,
  378. DescFile<"DebugCheckers.cpp">;
  379. def CallGraphViewer : Checker<"ViewCallGraph">,
  380. HelpText<"View Call Graph using GraphViz">,
  381. DescFile<"DebugCheckers.cpp">;
  382. def CallGraphDumper : Checker<"DumpCallGraph">,
  383. HelpText<"Display Call Graph">,
  384. DescFile<"DebugCheckers.cpp">;
  385. def ConfigDumper : Checker<"ConfigDumper">,
  386. HelpText<"Dump config table">,
  387. DescFile<"DebugCheckers.cpp">;
  388. def TraversalDumper : Checker<"DumpTraversal">,
  389. HelpText<"Print branch conditions as they are traversed by the engine">,
  390. DescFile<"TraversalChecker.cpp">;
  391. def CallDumper : Checker<"DumpCalls">,
  392. HelpText<"Print calls as they are traversed by the engine">,
  393. DescFile<"TraversalChecker.cpp">;
  394. def AnalyzerStatsChecker : Checker<"Stats">,
  395. HelpText<"Emit warnings with analyzer statistics">,
  396. DescFile<"AnalyzerStatsChecker.cpp">;
  397. def TaintTesterChecker : Checker<"TaintTest">,
  398. HelpText<"Mark tainted symbols as such.">,
  399. DescFile<"TaintTesterChecker.cpp">;
  400. def ExprInspectionChecker : Checker<"ExprInspection">,
  401. HelpText<"Check the analyzer's understanding of expressions">,
  402. DescFile<"ExprInspectionChecker.cpp">;
  403. def ExplodedGraphViewer : Checker<"ViewExplodedGraph">,
  404. HelpText<"View Exploded Graphs using GraphViz">,
  405. DescFile<"DebugCheckers.cpp">;
  406. } // end "debug"