15#ifndef LLVM_CLANG_SCALABLESTATICANALYSISFRAMEWORK_CORE_WHOLEPROGRAMANALYSIS_SUMMARYANALYSIS_H
16#define LLVM_CLANG_SCALABLESTATICANALYSISFRAMEWORK_CORE_WHOLEPROGRAMANALYSIS_SUMMARYANALYSIS_H
24#include "llvm/Support/Error.h"
51 virtual llvm::Error initialize() {
return llvm::Error::success(); }
58 virtual llvm::Error
finalize() {
return llvm::Error::success(); }
69template <
typename ResultT,
typename EntitySummaryT>
71 static_assert(std::is_base_of_v<AnalysisResult, ResultT>,
72 "ResultT must derive from AnalysisResult");
74 "ResultT must have a static analysisName() method");
75 static_assert(std::is_base_of_v<EntitySummary, EntitySummaryT>,
76 "EntitySummaryT must derive from EntitySummary");
79 using ResultType = ResultT;
81 std::unique_ptr<ResultT> Result = std::make_unique<ResultT>();
88 return EntitySummaryT::summaryName();
92 static const std::vector<AnalysisName>
Empty;
97 virtual llvm::Error
initialize()
override {
return llvm::Error::success(); }
100 virtual llvm::Error
add(
EntityId Id,
const EntitySummaryT &Summary) = 0;
104 virtual llvm::Error
finalize()
override {
return llvm::Error::success(); }
108 const ResultT &
result() const & {
return *Result; }
117 return add(Id,
static_cast<const EntitySummaryT &
>(Summary));
121 std::unique_ptr<AnalysisResult>
result() &&
final {
Orchestrates whole-program analysis over an LUSummary.
Uniquely identifies a whole-program analysis and the AnalysisResult it produces.
Unified registry for SummaryAnalysis and DerivedAnalysis implementations.
Lightweight opaque handle representing an entity in an EntityIdTable.
Base class for analysis-specific summary data.
friend class AnalysisDriver
virtual SummaryName summaryName() const =0
SummaryName of the EntitySummary type this analysis consumes.
Typed intermediate that concrete summary analyses inherit from.
virtual llvm::Error initialize() override
Called once before the first add() call. Override for initialization.
const ResultT & result() const &
Read-only access to the result being built.
const std::vector< AnalysisName > & dependencyNames() const final
AnalysisNames of all AnalysisResult dependencies.
ResultT & result() &
Mutable access to the result being built.
friend class AnalysisRegistry
virtual llvm::Error add(EntityId Id, const EntitySummaryT &Summary)=0
Called once per matching entity. Implement to accumulate data.
virtual llvm::Error finalize() override
Called after all entities have been processed.
AnalysisName analysisName() const final
Used by AnalysisRegistry::Add to derive the registry entry name.
SummaryName summaryName() const final
SummaryName of the EntitySummary type this analysis consumes.
Uniquely identifies an analysis summary.
constexpr bool HasAnalysisName_v
@ Result
The result type of a method or function.
void finalize(TemplateInstantiationCallbackPtrs &Callbacks, const Sema &TheSema)