CheckerRegistration.cpp revision 43dee220252ef0b42c5f8a3bb1eca97f84f2565f
143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis//===--- CheckerRegistration.cpp - Registration for the Analyzer Checkers -===// 243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// 343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// The LLVM Compiler Infrastructure 443dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// 543dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// This file is distributed under the University of Illinois Open Source 643dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// License. See LICENSE.TXT for details. 743dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// 843dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis//===----------------------------------------------------------------------===// 943dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// 1043dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// Defines the registration function for the analyzer checkers. 1143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis// 1243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis//===----------------------------------------------------------------------===// 1343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis 1443dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "AnalysisConsumer.h" 1543dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "../Checkers/ClangSACheckerProvider.h" 1643dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "clang/StaticAnalyzer/Core/CheckerManager.h" 1743dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "clang/StaticAnalyzer/Core/CheckerProvider.h" 1843dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "clang/Frontend/AnalyzerOptions.h" 1943dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "clang/Frontend/FrontendDiagnostic.h" 2043dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "clang/Basic/Diagnostic.h" 2143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "llvm/ADT/OwningPtr.h" 2243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis#include "llvm/ADT/SmallVector.h" 2343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis 2443dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidisusing namespace clang; 2543dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidisusing namespace ento; 2643dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis 2743dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios KyrtzidisCheckerManager *ento::registerCheckers(const AnalyzerOptions &opts, 2843dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis Diagnostic &diags) { 2943dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis llvm::OwningPtr<CheckerManager> checkerMgr(new CheckerManager()); 3043dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis 3143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis llvm::SmallVector<CheckerOptInfo, 8> checkerOpts; 3243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis for (unsigned i = 0, e = opts.CheckersControlList.size(); i != e; ++i) { 3343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis const std::pair<std::string, bool> &opt = opts.CheckersControlList[i]; 3443dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis checkerOpts.push_back(CheckerOptInfo(opt.first.c_str(), opt.second)); 3543dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis } 3643dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis 3743dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis llvm::OwningPtr<CheckerProvider> provider(createClangSACheckerProvider()); 3843dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis provider->registerCheckers(*checkerMgr, 3943dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis checkerOpts.data(), checkerOpts.size()); 4043dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis 4143dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis // FIXME: Load CheckerProviders from plugins. 4243dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis 4343dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis for (unsigned i = 0, e = checkerOpts.size(); i != e; ++i) { 4443dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis if (checkerOpts[i].isUnclaimed()) 4543dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis diags.Report(diag::warn_unkwown_analyzer_checker) 4643dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis << checkerOpts[i].getName(); 4743dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis } 4843dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis 4943dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis return checkerMgr.take(); 5043dee220252ef0b42c5f8a3bb1eca97f84f2565fArgyrios Kyrtzidis} 51