LocalCheckers.h revision 9ef6537a894c33003359b1f9b9676e9178e028b7
11ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremenek//==- LocalCheckers.h - Intra-Procedural+Flow-Sensitive Checkers -*- C++ -*-==//
21ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremenek//
31ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremenek//                     The LLVM Compiler Infrastructure
41ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremenek//
50bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// This file is distributed under the University of Illinois Open Source
60bc735ffcfb223c0186419547abaa5c84482663eChris Lattner// License. See LICENSE.TXT for details.
71ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremenek//
81ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremenek//===----------------------------------------------------------------------===//
91ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremenek//
101ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremenek//  This file defines the interface to call a set of intra-procedural (local)
111ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremenek//  checkers that use flow/path-sensitive analyses to find bugs.
121ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremenek//
131ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremenek//===----------------------------------------------------------------------===//
141ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremenek
155a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis#ifndef LLVM_CLANG_GR_LOCALCHECKERS_H
165a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis#define LLVM_CLANG_GR_LOCALCHECKERS_H
171ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremenek
181ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremeneknamespace clang {
191ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremenek
201ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremenekclass CFG;
2163bbe5312cd89ce0ceb684bff68c5baef636e93cTed Kremenekclass Decl;
22c0508f9fe37a3afb1ccad39879348272545e55dbChris Lattnerclass Diagnostic;
23fdd225ed6f362a8550e597eb875d9c402b8a309cTed Kremenekclass ASTContext;
24072192bcbb05a0fee7ec3061750b27e8d2004952Ted Kremenekclass LangOptions;
251a654b60ef40e84f3943cdb581795c4d4dae1e45Ted Kremenekclass ParentMap;
2617fdf955237aa626acbfd6070633318380c2340fTed Kremenekclass LiveVariables;
27db09a4dee28a4515438af60f2d2b4a83e4965c31Ted Kremenekclass ObjCImplementationDecl;
283cd483cbbf8921f463b3ee91d5da8a63db9d1299Ted Kremenekclass LangOptions;
29676ca153e04b1c6be477bc8a10f1e06256850ceeTed Kremenekclass TranslationUnitDecl;
301eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
319ef6537a894c33003359b1f9b9676e9178e028b7Ted Kremeneknamespace ento {
325a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis
335a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidisclass PathDiagnosticClient;
34d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidisclass TransferFuncs;
355a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidisclass BugType;
365a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidisclass BugReporter;
37d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidisclass ExprEngine;
385a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis
39b317f8f5ca8737a5bbad97a3f7566a2dbd2ed61bZhongxing Xuvoid CheckDeadStores(CFG &cfg, LiveVariables &L, ParentMap &map,
40b317f8f5ca8737a5bbad97a3f7566a2dbd2ed61bZhongxing Xu                     BugReporter& BR);
411eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
42d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios KyrtzidisTransferFuncs* MakeCFRefCountTF(ASTContext& Ctx, bool GCEnabled,
431eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump                                  const LangOptions& lopts);
441eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
452376002038c8b904acd20be754aedd1a7471be71Ted Kremenekvoid CheckObjCDealloc(const ObjCImplementationDecl* D, const LangOptions& L,
463cd483cbbf8921f463b3ee91d5da8a63db9d1299Ted Kremenek                      BugReporter& BR);
471eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
482376002038c8b904acd20be754aedd1a7471be71Ted Kremenekvoid CheckObjCInstMethSignature(const ObjCImplementationDecl *ID,
492376002038c8b904acd20be754aedd1a7471be71Ted Kremenek                                BugReporter& BR);
502376002038c8b904acd20be754aedd1a7471be71Ted Kremenek
512376002038c8b904acd20be754aedd1a7471be71Ted Kremenekvoid CheckObjCUnusedIvar(const ObjCImplementationDecl *D, BugReporter& BR);
521eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
53d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidisvoid RegisterAppleChecks(ExprEngine& Eng, const Decl &D);
54d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidisvoid RegisterExperimentalChecks(ExprEngine &Eng);
55d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidisvoid RegisterExperimentalInternalChecks(ExprEngine &Eng);
561eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump
57676ca153e04b1c6be477bc8a10f1e06256850ceeTed Kremenekvoid CheckLLVMConventions(TranslationUnitDecl &TU, BugReporter &BR);
582376002038c8b904acd20be754aedd1a7471be71Ted Kremenekvoid CheckSecuritySyntaxOnly(const Decl *D, BugReporter &BR);
5928a109f63506d8c96e3fbf1b959b603ccec2f586Zhongxing Xuvoid CheckSizeofPointer(const Decl *D, BugReporter &BR);
603ff8481f4be3f30e1082488238d83f78342303e1Zhongxing Xu
61d2592a34a059e7cbb2b11dc53649ac4912422909Argyrios Kyrtzidisvoid RegisterCallInliner(ExprEngine &Eng);
625a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis
635a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis} // end GR namespace
645a4f98ff943e6a501b0fe47ade007c9bbf96cb88Argyrios Kyrtzidis
651ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremenek} // end namespace clang
661ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremenek
671ed6d2e4fda310af2de2ec09cdfedfa280cce948Ted Kremenek#endif
68