CheckerRegistration.cpp revision 221345
1249423Sdim//===--- CheckerRegistration.cpp - Registration for the Analyzer Checkers -===// 2218885Sdim// 3218885Sdim// The LLVM Compiler Infrastructure 4218885Sdim// 5218885Sdim// This file is distributed under the University of Illinois Open Source 6218885Sdim// License. See LICENSE.TXT for details. 7218885Sdim// 8218885Sdim//===----------------------------------------------------------------------===// 9218885Sdim// 10218885Sdim// Defines the registration function for the analyzer checkers. 11218885Sdim// 12218885Sdim//===----------------------------------------------------------------------===// 13218885Sdim 14218885Sdim#include "clang/StaticAnalyzer/Frontend/CheckerRegistration.h" 15218885Sdim#include "clang/StaticAnalyzer/Frontend/FrontendActions.h" 16218885Sdim#include "../Checkers/ClangSACheckerProvider.h" 17218885Sdim#include "clang/StaticAnalyzer/Core/CheckerManager.h" 18218885Sdim#include "clang/StaticAnalyzer/Core/CheckerProvider.h" 19218885Sdim#include "clang/Frontend/AnalyzerOptions.h" 20224145Sdim#include "clang/Frontend/FrontendDiagnostic.h" 21224145Sdim#include "clang/Basic/Diagnostic.h" 22218885Sdim#include "llvm/Support/raw_ostream.h" 23218885Sdim#include "llvm/ADT/OwningPtr.h" 24218885Sdim#include "llvm/ADT/SmallVector.h" 25218885Sdim 26218885Sdimusing namespace clang; 27218885Sdimusing namespace ento; 28218885Sdim 29218885SdimCheckerManager *ento::registerCheckers(const AnalyzerOptions &opts, 30218885Sdim const LangOptions &langOpts, 31218885Sdim Diagnostic &diags) { 32218885Sdim llvm::OwningPtr<CheckerManager> checkerMgr(new CheckerManager(langOpts)); 33218885Sdim 34218885Sdim llvm::SmallVector<CheckerOptInfo, 8> checkerOpts; 35218885Sdim for (unsigned i = 0, e = opts.CheckersControlList.size(); i != e; ++i) { 36218885Sdim const std::pair<std::string, bool> &opt = opts.CheckersControlList[i]; 37218885Sdim checkerOpts.push_back(CheckerOptInfo(opt.first.c_str(), opt.second)); 38218885Sdim } 39218885Sdim 40218885Sdim llvm::OwningPtr<CheckerProvider> provider(createClangSACheckerProvider()); 41218885Sdim provider->registerCheckers(*checkerMgr, 42218885Sdim checkerOpts.data(), checkerOpts.size()); 43239462Sdim 44239462Sdim // FIXME: Load CheckerProviders from plugins. 45239462Sdim 46218885Sdim checkerMgr->finishedCheckerRegistration(); 47218885Sdim 48239462Sdim for (unsigned i = 0, e = checkerOpts.size(); i != e; ++i) { 49218885Sdim if (checkerOpts[i].isUnclaimed()) 50218885Sdim diags.Report(diag::warn_unkwown_analyzer_checker) 51218885Sdim << checkerOpts[i].getName(); 52243830Sdim } 53249423Sdim 54218885Sdim return checkerMgr.take(); 55218885Sdim} 56218885Sdim 57218885Sdimvoid ento::printCheckerHelp(llvm::raw_ostream &OS) { 58218885Sdim OS << "OVERVIEW: Clang Static Analyzer Checkers List\n"; 59218885Sdim OS << '\n'; 60218885Sdim 61243830Sdim llvm::OwningPtr<CheckerProvider> provider(createClangSACheckerProvider()); 62218885Sdim provider->printHelp(OS); 63243830Sdim 64243830Sdim // FIXME: Load CheckerProviders from plugins. 65218885Sdim} 66218885Sdim