CheckerRegistration.cpp revision 27af04bcca46f8a3374586be1301477f9123f5e1
1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//===--- CheckerRegistration.cpp - Registration for the Analyzer Checkers -===// 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// The LLVM Compiler Infrastructure 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// This file is distributed under the University of Illinois Open Source 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// License. See LICENSE.TXT for details. 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//===----------------------------------------------------------------------===// 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Defines the registration function for the analyzer checkers. 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//===----------------------------------------------------------------------===// 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "clang/StaticAnalyzer/Frontend/CheckerRegistration.h" 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../Checkers/ClangSACheckerProvider.h" 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "clang/StaticAnalyzer/Core/CheckerManager.h" 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "clang/StaticAnalyzer/Core/CheckerProvider.h" 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "clang/Frontend/AnalyzerOptions.h" 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "clang/Frontend/FrontendDiagnostic.h" 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "clang/Basic/Diagnostic.h" 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "llvm/ADT/OwningPtr.h" 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "llvm/ADT/SmallVector.h" 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovusing namespace clang; 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovusing namespace ento; 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCheckerManager *ento::registerCheckers(const AnalyzerOptions &opts, 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Diagnostic &diags) { 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov llvm::OwningPtr<CheckerManager> checkerMgr(new CheckerManager()); 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov llvm::SmallVector<CheckerOptInfo, 8> checkerOpts; 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (unsigned i = 0, e = opts.CheckersControlList.size(); i != e; ++i) { 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const std::pair<std::string, bool> &opt = opts.CheckersControlList[i]; 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov checkerOpts.push_back(CheckerOptInfo(opt.first.c_str(), opt.second)); 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov llvm::OwningPtr<CheckerProvider> provider(createClangSACheckerProvider()); 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov provider->registerCheckers(*checkerMgr, 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov checkerOpts.data(), checkerOpts.size()); 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov // FIXME: Load CheckerProviders from plugins. 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (unsigned i = 0, e = checkerOpts.size(); i != e; ++i) { 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (checkerOpts[i].isUnclaimed()) 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov diags.Report(diag::warn_unkwown_analyzer_checker) 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov << checkerOpts[i].getName(); 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return checkerMgr.take(); 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov