CheckerRegistration.cpp revision deb6447d0029bdb122397fafb5fa2a4e76f2e555
1//===--- CheckerRegistration.cpp - Registration for the Analyzer Checkers -===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// Defines the registration function for the analyzer checkers. 11// 12//===----------------------------------------------------------------------===// 13 14#include "clang/StaticAnalyzer/Frontend/CheckerRegistration.h" 15#include "clang/StaticAnalyzer/Frontend/FrontendActions.h" 16#include "../Checkers/ClangSACheckerProvider.h" 17#include "clang/StaticAnalyzer/Core/CheckerManager.h" 18#include "clang/StaticAnalyzer/Core/CheckerProvider.h" 19#include "clang/Frontend/AnalyzerOptions.h" 20#include "clang/Frontend/FrontendDiagnostic.h" 21#include "clang/Basic/Diagnostic.h" 22#include "llvm/Support/raw_ostream.h" 23#include "llvm/ADT/OwningPtr.h" 24#include "llvm/ADT/SmallVector.h" 25 26using namespace clang; 27using namespace ento; 28 29CheckerManager *ento::registerCheckers(const AnalyzerOptions &opts, 30 const LangOptions &langOpts, 31 Diagnostic &diags) { 32 llvm::OwningPtr<CheckerManager> checkerMgr(new CheckerManager(langOpts)); 33 34 llvm::SmallVector<CheckerOptInfo, 8> checkerOpts; 35 for (unsigned i = 0, e = opts.CheckersControlList.size(); i != e; ++i) { 36 const std::pair<std::string, bool> &opt = opts.CheckersControlList[i]; 37 checkerOpts.push_back(CheckerOptInfo(opt.first.c_str(), opt.second)); 38 } 39 40 llvm::OwningPtr<CheckerProvider> provider(createClangSACheckerProvider()); 41 provider->registerCheckers(*checkerMgr, 42 checkerOpts.data(), checkerOpts.size()); 43 44 // FIXME: Load CheckerProviders from plugins. 45 46 checkerMgr->finishedCheckerRegistration(); 47 48 for (unsigned i = 0, e = checkerOpts.size(); i != e; ++i) { 49 if (checkerOpts[i].isUnclaimed()) 50 diags.Report(diag::warn_unkwown_analyzer_checker) 51 << checkerOpts[i].getName(); 52 } 53 54 return checkerMgr.take(); 55} 56 57void ento::printCheckerHelp(llvm::raw_ostream &OS) { 58 OS << "OVERVIEW: Clang Static Analyzer Checkers List\n"; 59 OS << '\n'; 60 OS << "USAGE: -analyzer-checker <check1,check2,...>\n"; 61 OS << '\n'; 62 OS << "CHECKERS:\n"; 63 64 llvm::OwningPtr<CheckerProvider> provider(createClangSACheckerProvider()); 65 provider->printHelp(OS); 66 67 // FIXME: Load CheckerProviders from plugins. 68} 69