CheckerRegistration.cpp revision 218887
1218887Sdim//===--- CheckerRegistration.cpp - Registration for the Analyzer Checkers -===// 2218887Sdim// 3218887Sdim// The LLVM Compiler Infrastructure 4218887Sdim// 5218887Sdim// This file is distributed under the University of Illinois Open Source 6218887Sdim// License. See LICENSE.TXT for details. 7218887Sdim// 8218887Sdim//===----------------------------------------------------------------------===// 9218887Sdim// 10218887Sdim// Defines the registration function for the analyzer checkers. 11218887Sdim// 12218887Sdim//===----------------------------------------------------------------------===// 13218887Sdim 14218887Sdim#include "clang/StaticAnalyzer/Frontend/CheckerRegistration.h" 15218887Sdim#include "../Checkers/ClangSACheckerProvider.h" 16218887Sdim#include "clang/StaticAnalyzer/Core/CheckerManager.h" 17218887Sdim#include "clang/StaticAnalyzer/Core/CheckerProvider.h" 18218887Sdim#include "clang/Frontend/AnalyzerOptions.h" 19218887Sdim#include "clang/Frontend/FrontendDiagnostic.h" 20218887Sdim#include "clang/Basic/Diagnostic.h" 21218887Sdim#include "llvm/ADT/OwningPtr.h" 22218887Sdim#include "llvm/ADT/SmallVector.h" 23218887Sdim 24218887Sdimusing namespace clang; 25218887Sdimusing namespace ento; 26218887Sdim 27218887SdimCheckerManager *ento::registerCheckers(const AnalyzerOptions &opts, 28218887Sdim Diagnostic &diags) { 29218887Sdim llvm::OwningPtr<CheckerManager> checkerMgr(new CheckerManager()); 30218887Sdim 31218887Sdim llvm::SmallVector<CheckerOptInfo, 8> checkerOpts; 32218887Sdim for (unsigned i = 0, e = opts.CheckersControlList.size(); i != e; ++i) { 33218887Sdim const std::pair<std::string, bool> &opt = opts.CheckersControlList[i]; 34218887Sdim checkerOpts.push_back(CheckerOptInfo(opt.first.c_str(), opt.second)); 35218887Sdim } 36218887Sdim 37218887Sdim llvm::OwningPtr<CheckerProvider> provider(createClangSACheckerProvider()); 38218887Sdim provider->registerCheckers(*checkerMgr, 39218887Sdim checkerOpts.data(), checkerOpts.size()); 40218887Sdim 41218887Sdim // FIXME: Load CheckerProviders from plugins. 42218887Sdim 43218887Sdim for (unsigned i = 0, e = checkerOpts.size(); i != e; ++i) { 44218887Sdim if (checkerOpts[i].isUnclaimed()) 45218887Sdim diags.Report(diag::warn_unkwown_analyzer_checker) 46218887Sdim << checkerOpts[i].getName(); 47218887Sdim } 48218887Sdim 49218887Sdim return checkerMgr.take(); 50218887Sdim} 51