1e5dd7070Spatrick #include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
2e5dd7070Spatrick #include "clang/StaticAnalyzer/Core/Checker.h"
3e5dd7070Spatrick #include "clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h"
4e5dd7070Spatrick #include "clang/StaticAnalyzer/Frontend/CheckerRegistry.h"
5e5dd7070Spatrick
6e5dd7070Spatrick using namespace clang;
7e5dd7070Spatrick using namespace ento;
8e5dd7070Spatrick
9e5dd7070Spatrick namespace {
10e5dd7070Spatrick struct MyChecker : public Checker<check::BeginFunction> {
checkBeginFunction__anon441515ca0111::MyChecker11e5dd7070Spatrick void checkBeginFunction(CheckerContext &Ctx) const {}
12e5dd7070Spatrick };
13e5dd7070Spatrick
registerMyChecker(CheckerManager & Mgr)14e5dd7070Spatrick void registerMyChecker(CheckerManager &Mgr) {
15e5dd7070Spatrick MyChecker *Checker = Mgr.registerChecker<MyChecker>();
16e5dd7070Spatrick llvm::outs() << "Example option is set to "
17e5dd7070Spatrick << (Mgr.getAnalyzerOptions().getCheckerBooleanOption(
18e5dd7070Spatrick Checker, "ExampleOption")
19e5dd7070Spatrick ? "true"
20e5dd7070Spatrick : "false")
21e5dd7070Spatrick << '\n';
22e5dd7070Spatrick }
23e5dd7070Spatrick
shouldRegisterMyChecker(const CheckerManager & mgr)24*ec727ea7Spatrick bool shouldRegisterMyChecker(const CheckerManager &mgr) { return true; }
25e5dd7070Spatrick
26e5dd7070Spatrick } // end anonymous namespace
27e5dd7070Spatrick
28e5dd7070Spatrick // Register plugin!
clang_registerCheckers(CheckerRegistry & registry)29e5dd7070Spatrick extern "C" void clang_registerCheckers(CheckerRegistry ®istry) {
30e5dd7070Spatrick registry.addChecker(registerMyChecker, shouldRegisterMyChecker,
31e5dd7070Spatrick "example.MyChecker", "Example Description",
32e5dd7070Spatrick "example.mychecker.documentation.nonexistent.html",
33e5dd7070Spatrick /*isHidden*/false);
34e5dd7070Spatrick
35e5dd7070Spatrick registry.addCheckerOption(/*OptionType*/ "bool",
36e5dd7070Spatrick /*CheckerFullName*/ "example.MyChecker",
37e5dd7070Spatrick /*OptionName*/ "ExampleOption",
38e5dd7070Spatrick /*DefaultValStr*/ "false",
39e5dd7070Spatrick /*Description*/ "This is an example checker opt.",
40e5dd7070Spatrick /*DevelopmentStage*/ "released");
41e5dd7070Spatrick }
42e5dd7070Spatrick
43e5dd7070Spatrick extern "C" const char clang_analyzerAPIVersionString[] =
44e5dd7070Spatrick CLANG_ANALYZER_API_VERSION_STRING;
45