CheckerRegistry.h revision 08b86531ade68727c56918f162816075b87c864a
1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//===--- CheckerRegistry.h - Maintains all available checkers ---*- C++ -*-===// 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// The LLVM Compiler Infrastructure 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// This file is distributed under the University of Illinois Open Source 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// License. See LICENSE.TXT for details. 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver//===----------------------------------------------------------------------===// 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#ifndef LLVM_CLANG_STATICANALYZER_CORE_CHECKERREGISTRY_H 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#define LLVM_CLANG_STATICANALYZER_CORE_CHECKERREGISTRY_H 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "clang/StaticAnalyzer/Core/CheckerManager.h" 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "clang/Basic/LLVM.h" 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include <vector> 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace clang { 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace ento { 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass CheckerOptInfo; 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass CheckerRegistry { 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverpublic: 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver typedef void (*InitializationFunction)(CheckerManager &); 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver struct CheckerInfo { 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver InitializationFunction Initialize; 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver StringRef FullName; 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver StringRef Desc; 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver CheckerInfo(InitializationFunction fn, StringRef name, StringRef desc) 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver : Initialize(fn), FullName(name), Desc(desc) {} 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver }; 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver typedef std::vector<CheckerInfo> CheckerInfoList; 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverprivate: 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver template <typename T> 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver static void initializeManager(CheckerManager &mgr) { 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver mgr.registerChecker<T>(); 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverpublic: 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void addChecker(InitializationFunction fn, StringRef fullName, 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver StringRef desc); 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver template <class T> 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void addChecker(StringRef fullName, StringRef desc) { 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver addChecker(&initializeManager<T>, fullName, desc); 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void initializeManager(CheckerManager &mgr, 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver SmallVectorImpl<CheckerOptInfo> &opts) const; 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void printHelp(raw_ostream &out, size_t maxNameChars = 30) const ; 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverprivate: 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver mutable CheckerInfoList Checkers; 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver mutable llvm::StringMap<size_t> Packages; 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}; 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} // end namespace ento 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} // end namespace clang 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#endif 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver