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