1//===--- AnalysisConsumer.h - Front-end Analysis Engine Hooks ---*- C++ -*-===//
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// This header contains the functions necessary for a front-end to run various
11// analyses.
12//
13//===----------------------------------------------------------------------===//
14
15#ifndef LLVM_CLANG_STATICANALYZER_FRONTEND_ANALYSISCONSUMER_H
16#define LLVM_CLANG_STATICANALYZER_FRONTEND_ANALYSISCONSUMER_H
17
18#include "clang/AST/ASTConsumer.h"
19#include "clang/Basic/LLVM.h"
20#include <functional>
21#include <memory>
22
23namespace clang {
24
25class Preprocessor;
26class DiagnosticsEngine;
27class CodeInjector;
28class CompilerInstance;
29
30namespace ento {
31class PathDiagnosticConsumer;
32class CheckerManager;
33class CheckerRegistry;
34
35class AnalysisASTConsumer : public ASTConsumer {
36public:
37 virtual void AddDiagnosticConsumer(PathDiagnosticConsumer *Consumer) = 0;
38
39 /// This method allows registering statically linked custom checkers that are
40 /// not a part of the Clang tree. It employs the same mechanism that is used
41 /// by plugins.
42 ///
43 /// Example:
44 ///
45 /// Consumer->AddCheckerRegistrationFn([] (CheckerRegistry& Registry) {
46 /// Registry.addChecker<MyCustomChecker>("example.MyCustomChecker",
47 /// "Description");
48 /// });
49 virtual void
50 AddCheckerRegistrationFn(std::function<void(CheckerRegistry &)> Fn) = 0;
51};
52
53/// CreateAnalysisConsumer - Creates an ASTConsumer to run various code
54/// analysis passes. (The set of analyses run is controlled by command-line
55/// options.)
56std::unique_ptr<AnalysisASTConsumer>
57CreateAnalysisConsumer(CompilerInstance &CI);
58
59} // end GR namespace
60
61} // end clang namespace
62
63#endif
64