clang 23.0.0git
ExtractorRegistry.h
Go to the documentation of this file.
1//===- ExtractorRegistry.h --------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// Registry for TUSummaryExtractors, and some helper functions.
10// To register some custom extractor, insert this code:
11//
12// // NOLINTNEXTLINE(misc-use-internal-linkage)
13// volatile int SSAFMyExtractorAnchorSource = 0;
14// static TUSummaryExtractorRegistry::Add<MyExtractor>
15// X("MyExtractor", "My awesome extractor");
16//
17// Finally, insert a use of the new anchor symbol into the force-linker header:
18// clang/include/clang/ScalableStaticAnalysisFramework/SSAFBuiltinForceLinker.h:
19//
20// extern volatile int SSAFMyExtractorAnchorSource;
21// [[maybe_unused]] static int SSAFMyExtractorAnchorDestination =
22// SSAFMyExtractorAnchorSource;
23//
24//===----------------------------------------------------------------------===//
25
26#ifndef LLVM_CLANG_SCALABLESTATICANALYSISFRAMEWORK_CORE_TUSUMMARY_EXTRACTORREGISTRY_H
27#define LLVM_CLANG_SCALABLESTATICANALYSISFRAMEWORK_CORE_TUSUMMARY_EXTRACTORREGISTRY_H
28
31#include "llvm/ADT/StringRef.h"
32#include "llvm/Support/Registry.h"
33#include "llvm/Support/raw_ostream.h"
34
35namespace clang::ssaf {
36
37/// Check if a TUSummaryExtractor was registered with a given name.
39
40/// Try to instantiate a TUSummaryExtractor with a given name.
41/// This might return null if the construction of the desired TUSummaryExtractor
42/// failed.
43/// It's a fatal error if there is no extractor registered with the name.
44std::unique_ptr<ASTConsumer> makeTUSummaryExtractor(llvm::StringRef SummaryName,
45 TUSummaryBuilder &Builder);
46
47/// Print the list of available TUSummaryExtractors.
48void printAvailableTUSummaryExtractors(llvm::raw_ostream &OS);
49
50// Registry for adding new TUSummaryExtractor implementations.
52 llvm::Registry<TUSummaryExtractor, TUSummaryBuilder &>;
53
54} // namespace clang::ssaf
55
56namespace llvm {
57extern template class CLANG_TEMPLATE_ABI
58 Registry<clang::ssaf::TUSummaryExtractor, clang::ssaf::TUSummaryBuilder &>;
59} // namespace llvm
60
61#endif // LLVM_CLANG_SCALABLESTATICANALYSISFRAMEWORK_CORE_TUSUMMARY_EXTRACTORREGISTRY_H
Uniquely identifies an analysis summary.
Definition SummaryName.h:22
std::unique_ptr< ASTConsumer > makeTUSummaryExtractor(llvm::StringRef SummaryName, TUSummaryBuilder &Builder)
Try to instantiate a TUSummaryExtractor with a given name.
llvm::Registry< TUSummaryExtractor, TUSummaryBuilder & > TUSummaryExtractorRegistry
void printAvailableTUSummaryExtractors(llvm::raw_ostream &OS)
Print the list of available TUSummaryExtractors.
bool isTUSummaryExtractorRegistered(llvm::StringRef SummaryName)
Check if a TUSummaryExtractor was registered with a given name.
Diagnostic wrappers for TextAPI types for error reporting.
Definition Dominators.h:30