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
add(
EntityId Id,
const EntitySummaryT &Summary) = 0;
110 return add(Id,
static_cast<const EntitySummaryT &
>(Summary));
114 std::unique_ptr<AnalysisResult> takeResult() &&
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.
virtual SummaryName getSummaryName() const =0
SummaryName of the EntitySummary type this analysis consumes.
friend class AnalysisDriver
Typed intermediate that concrete summary analyses inherit from.
const std::vector< AnalysisName > & getDependencyNames() const final
AnalysisNames of all AnalysisResult dependencies.
const ResultT & getResult() const &
Read-only access to the result being built.
AnalysisName getAnalysisName() const final
Used by AnalysisRegistry::Add to derive the registry entry name.
friend class AnalysisRegistry
virtual llvm::Error add(EntityId Id, const EntitySummaryT &Summary)=0
Called once per matching entity. Implement to accumulate data.
ResultT & getResult() &
Mutable access to the result being built.
SummaryName getSummaryName() 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)