class CheckerRegistry

Declaration

class CheckerRegistry { /* full declaration omitted */ };

Description

Manages a set of available checkers for running a static analysis. The checkers are organized into packages by full name, where including a package will recursively include all subpackages and checkers within it. For example, the checker "core.builtin.NoReturnFunctionChecker" will be included if initializeManager() is called with an option of "core", "core.builtin", or the full name "core.builtin.NoReturnFunctionChecker".

Declared at: clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h:89

Member Variables

private clang::ento::CheckerRegistryData& Data
private clang::DiagnosticsEngine& Diags
private clang::AnalyzerOptions& AnOpts

Method Overview

  • public CheckerRegistry(clang::ento::CheckerRegistryData & Data, ArrayRef<std::string> Plugins, clang::DiagnosticsEngine & Diags, clang::AnalyzerOptions & AnOpts, ArrayRef<std::function<void (CheckerRegistry &)>> CheckerRegistrationFns = {})
  • public void addChecker(clang::ento::RegisterCheckerFn Fn, clang::ento::ShouldRegisterFunction sfn, llvm::StringRef FullName, llvm::StringRef Desc, llvm::StringRef DocsUri, bool IsHidden)
  • public template <class T>void addChecker(llvm::StringRef FullName, llvm::StringRef Desc, llvm::StringRef DocsUri, bool IsHidden = false)
  • public void addCheckerOption(llvm::StringRef OptionType, llvm::StringRef CheckerFullName, llvm::StringRef OptionName, llvm::StringRef DefaultValStr, llvm::StringRef Description, llvm::StringRef DevelopmentStatus, bool IsHidden = false)
  • public void addDependency(llvm::StringRef FullName, llvm::StringRef Dependency)
  • public void addPackage(llvm::StringRef FullName)
  • public void addPackageOption(llvm::StringRef OptionType, llvm::StringRef PackageFullName, llvm::StringRef OptionName, llvm::StringRef DefaultValStr, llvm::StringRef Description, llvm::StringRef DevelopmentStatus, bool IsHidden = false)
  • public void addWeakDependency(llvm::StringRef FullName, llvm::StringRef Dependency)
  • public void initializeManager(clang::ento::CheckerManager & CheckerMgr) const
  • private template <typename MGR, typename T>static void initializeManager(MGR & mgr)
  • public void initializeRegistry(const clang::ento::CheckerManager & Mgr)
  • private void resolveCheckerAndPackageOptions()
  • private template <bool IsWeak>void resolveDependencies()
  • private template <typename T>static bool returnTrue(const clang::ento::CheckerManager & mgr)
  • public void validateCheckerOptions() const

Methods

CheckerRegistry(
    clang::ento::CheckerRegistryData& Data,
    ArrayRef<std::string> Plugins,
    clang::DiagnosticsEngine& Diags,
    clang::AnalyzerOptions& AnOpts,
    ArrayRef<
        std::function<void(CheckerRegistry&)>>
        CheckerRegistrationFns = {})

Declared at: clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h:91

Parameters

clang::ento::CheckerRegistryData& Data
ArrayRef<std::string> Plugins
clang::DiagnosticsEngine& Diags
clang::AnalyzerOptions& AnOpts
ArrayRef<std::function<void(CheckerRegistry&)>> CheckerRegistrationFns = {}

void addChecker(
    clang::ento::RegisterCheckerFn Fn,
    clang::ento::ShouldRegisterFunction sfn,
    llvm::StringRef FullName,
    llvm::StringRef Desc,
    llvm::StringRef DocsUri,
    bool IsHidden)

Description

Adds a checker to the registry. Use this non-templated overload when your checker requires custom initialization.

Declared at: clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h:118

Parameters

clang::ento::RegisterCheckerFn Fn
clang::ento::ShouldRegisterFunction sfn
llvm::StringRef FullName
llvm::StringRef Desc
llvm::StringRef DocsUri
bool IsHidden

template <class T>
void addChecker(llvm::StringRef FullName,
                llvm::StringRef Desc,
                llvm::StringRef DocsUri,
                bool IsHidden = false)

Description

Adds a checker to the registry. Use this templated overload when your checker does not require any custom initialization. This function isn't really needed and probably causes more headaches than the tiny convenience that it provides, but external plugins might use it, and there isn't a strong incentive to remove it.

Declared at: clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h:128

Templates

T

Parameters

llvm::StringRef FullName
llvm::StringRef Desc
llvm::StringRef DocsUri
bool IsHidden = false

void addCheckerOption(
    llvm::StringRef OptionType,
    llvm::StringRef CheckerFullName,
    llvm::StringRef OptionName,
    llvm::StringRef DefaultValStr,
    llvm::StringRef Description,
    llvm::StringRef DevelopmentStatus,
    bool IsHidden = false)

Description

Registers an option to a given checker. A checker option will always have the following format: CheckerFullName:OptionName=Value And can be specified from the command line like this: -analyzer-config CheckerFullName:OptionName=Value Options for unknown checkers, or unknown options for a given checker, or invalid value types for that given option are reported as an error in non-compatibility mode.

Declared at: clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h:154

Parameters

llvm::StringRef OptionType
llvm::StringRef CheckerFullName
llvm::StringRef OptionName
llvm::StringRef DefaultValStr
llvm::StringRef Description
llvm::StringRef DevelopmentStatus
bool IsHidden = false

void addDependency(llvm::StringRef FullName,
                   llvm::StringRef Dependency)

Description

Makes the checker with the full name \p fullName depend on the checker called \p dependency.

Declared at: clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h:139

Parameters

llvm::StringRef FullName
llvm::StringRef Dependency

void addPackage(llvm::StringRef FullName)

Description

Adds a package to the registry.

Declared at: clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h:160

Parameters

llvm::StringRef FullName

void addPackageOption(
    llvm::StringRef OptionType,
    llvm::StringRef PackageFullName,
    llvm::StringRef OptionName,
    llvm::StringRef DefaultValStr,
    llvm::StringRef Description,
    llvm::StringRef DevelopmentStatus,
    bool IsHidden = false)

Description

Registers an option to a given package. A package option will always have the following format: PackageFullName:OptionName=Value And can be specified from the command line like this: -analyzer-config PackageFullName:OptionName=Value Options for unknown packages, or unknown options for a given package, or invalid value types for that given option are reported as an error in non-compatibility mode.

Declared at: clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h:171

Parameters

llvm::StringRef OptionType
llvm::StringRef PackageFullName
llvm::StringRef OptionName
llvm::StringRef DefaultValStr
llvm::StringRef Description
llvm::StringRef DevelopmentStatus
bool IsHidden = false

void addWeakDependency(llvm::StringRef FullName,
                       llvm::StringRef Dependency)

Description

Makes the checker with the full name \p fullName weak depend on the checker called \p dependency.

Declared at: clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h:143

Parameters

llvm::StringRef FullName
llvm::StringRef Dependency

void initializeManager(
    clang::ento::CheckerManager& CheckerMgr) const

Description

Initializes a CheckerManager by calling the initialization functions for all checkers specified by the given CheckerOptInfo list. The order of this list is significant; later options can be used to reverse earlier ones. This can be used to exclude certain checkers in an included package.

Declared at: clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h:181

Parameters

clang::ento::CheckerManager& CheckerMgr

template <typename MGR, typename T>
static void initializeManager(MGR& mgr)

Description

Default initialization function for checkers -- since CheckerManager includes this header, we need to make it a template parameter, and since the checker must be a template parameter as well, we can't put this in the cpp file.

Declared at: clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h:107

Templates

MGR
T

Parameters

MGR& mgr

void initializeRegistry(
    const clang::ento::CheckerManager& Mgr)

Description

Collects all enabled checkers in the field EnabledCheckers. It preserves the order of insertion, as dependencies have to be enabled before the checkers that depend on them.

Declared at: clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h:99

Parameters

const clang::ento::CheckerManager& Mgr

void resolveCheckerAndPackageOptions()

Declared at: clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h:188

template <bool IsWeak>
void resolveDependencies()

Declared at: clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h:187

Templates

bool IsWeak

template <typename T>
static bool returnTrue(
    const clang::ento::CheckerManager& mgr)

Declared at: clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h:111

Templates

T

Parameters

const clang::ento::CheckerManager& mgr

void validateCheckerOptions() const

Description

Check if every option corresponds to a specific checker or package.

Declared at: clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistry.h:184