CheckerRegistration.cpp revision 219077
1141104Sharti//===--- CheckerRegistration.cpp - Registration for the Analyzer Checkers -===// 2141104Sharti// 3141104Sharti// The LLVM Compiler Infrastructure 4141104Sharti// 5141104Sharti// This file is distributed under the University of Illinois Open Source 6141104Sharti// License. See LICENSE.TXT for details. 7141104Sharti// 8141104Sharti//===----------------------------------------------------------------------===// 9141104Sharti// 10141104Sharti// Defines the registration function for the analyzer checkers. 11141104Sharti// 12141104Sharti//===----------------------------------------------------------------------===// 13141104Sharti 14141104Sharti#include "clang/StaticAnalyzer/Frontend/CheckerRegistration.h" 15141104Sharti#include "clang/StaticAnalyzer/Frontend/FrontendActions.h" 16141104Sharti#include "../Checkers/ClangSACheckerProvider.h" 17141104Sharti#include "clang/StaticAnalyzer/Core/CheckerManager.h" 18141104Sharti#include "clang/StaticAnalyzer/Core/CheckerProvider.h" 19141104Sharti#include "clang/Frontend/AnalyzerOptions.h" 20141104Sharti#include "clang/Frontend/FrontendDiagnostic.h" 21141104Sharti#include "clang/Basic/Diagnostic.h" 22141104Sharti#include "llvm/Support/raw_ostream.h" 23141104Sharti#include "llvm/ADT/OwningPtr.h" 24141104Sharti#include "llvm/ADT/SmallVector.h" 25141104Sharti 26141104Shartiusing namespace clang; 27141104Shartiusing namespace ento; 28141104Sharti 29141104ShartiCheckerManager *ento::registerCheckers(const AnalyzerOptions &opts, 30141104Sharti const LangOptions &langOpts, 31141104Sharti Diagnostic &diags) { 32141104Sharti llvm::OwningPtr<CheckerManager> checkerMgr(new CheckerManager(langOpts)); 33141104Sharti 34141104Sharti llvm::SmallVector<CheckerOptInfo, 8> checkerOpts; 35141104Sharti for (unsigned i = 0, e = opts.CheckersControlList.size(); i != e; ++i) { 36141104Sharti const std::pair<std::string, bool> &opt = opts.CheckersControlList[i]; 37141104Sharti checkerOpts.push_back(CheckerOptInfo(opt.first.c_str(), opt.second)); 38141104Sharti } 39141104Sharti 40141104Sharti llvm::OwningPtr<CheckerProvider> provider(createClangSACheckerProvider()); 41141104Sharti provider->registerCheckers(*checkerMgr, 42141104Sharti checkerOpts.data(), checkerOpts.size()); 43141104Sharti 44141104Sharti // FIXME: Load CheckerProviders from plugins. 45141104Sharti 46141104Sharti for (unsigned i = 0, e = checkerOpts.size(); i != e; ++i) { 47141104Sharti if (checkerOpts[i].isUnclaimed()) 48141104Sharti diags.Report(diag::warn_unkwown_analyzer_checker) 49141104Sharti << checkerOpts[i].getName(); 50141104Sharti } 51141104Sharti 52141104Sharti return checkerMgr.take(); 53141104Sharti} 54141104Sharti 55141104Shartivoid ento::printCheckerHelp(llvm::raw_ostream &OS) { 56141104Sharti OS << "OVERVIEW: Clang Static Analyzer Checkers List\n"; 57141104Sharti OS << '\n'; 58141104Sharti OS << "USAGE: -analyzer-checker <check1,check2,...>\n"; 59141104Sharti OS << '\n'; 60141104Sharti OS << "CHECKERS:\n"; 61141252Sharti 62141252Sharti llvm::OwningPtr<CheckerProvider> provider(createClangSACheckerProvider()); 63141104Sharti provider->printHelp(OS); 64141104Sharti 65141104Sharti // FIXME: Load CheckerProviders from plugins. 66141104Sharti} 67141104Sharti